2012-12-01 5 views
0

약간의 문제가 있습니다. 여기 상황이 있습니다. 주 버튼에 특정 버튼을 클릭 할 때 증가하는 양 필드가 있습니다. 모든 주문을 삭제할 수있는 방법이 제공되며 (기본적으로 레스토랑 터미널 용으로 프로그래밍하고 있습니다) 금액이 감소합니다. delete 메소드는 다른 클래스에 배치됩니다.한 클래스에서 다른 클래스로 값을 반환하는 방법은 무엇입니까? Java

public void posdel(int pos, JTextField amountFieldGot, int amountGot) 
{ 
    if(slist==null) 
    { 
     JOptionPane.showMessageDialog(null, "No order has been placed yet.",null,JOptionPane.WARNING_MESSAGE); 
    } 
    else 
    { 
     if(pos==1) 
     { 
      reductionAmount = (slist.quantity*slist.price); 
      amountGot = amountGot - reductionAmount; 
      slist=slist.next; 
     } 
     else 
     { 
      int i=1; 
      Node temp=slist; 
      Node prev=null; 
      while(temp.next!=null && i<pos) 
      { 
       prev=temp; 
       temp=temp.next; 
       i++; 
      } 
      if(pos==i) 
      { 
       prev.next=temp.next; 
      } 
      else 
      { 
       JOptionPane.showMessageDialog(null, "Invalid order", null, JOptionPane.ERROR_MESSAGE); 
      } 
     } 
    } 
    amountFieldGot.setText(Integer.toString(amountGot)); 
} 

그래서 기본적으로 나는 포지 델 메소드에 매개 변수로 전달하는 GUI에 amountField가 있습니다. 금액 값을 매개 변수로 전달합니다. 내가 얻는 새로운 금액은 첫 번째 주문을 삭제 한 후에 amountGot입니다. (다른 위치에 대한 코드를 작성하지 않았습니다.) 메소드에 전달하는 금액 값이 30 (14 + 16) 14 = 주문 1, 16 = 주문 2라고 가정합니다. 내 첫 주문의 값은 14입니다. 그래서 amountGot = 30 - 14는 16입니다. 그리고 GUI의 amountField는 16으로 업데이트됩니다. 이제 내 주문 2가 내 주문 1이됩니다. 그리고 삭제하려고하면 this, my amountField가 14로 업데이트됩니다 (30-16 = 14). 그래서 금액 값이 30과 동일하게 유지되고 새로운 amountGot 값으로 업데이트되지 않는다고 생각합니다. 누군가이 문제를 해결할 수 있도록 도와 주실 수 있습니까?

아래의 코드는 내 삭제 버튼입니다.

deleteButton.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       dishDelPos = JOptionPane.showInputDialog("Enter the position of the order to be deleted"); 
       try 
       { 
        dishDeletePosition = Integer.parseInt(dishDelPos); 
        order1.posdel(dishDeletePosition, amountField, amount); 
        repaint(); 
       } 
       catch(NumberFormatException ex1) 
       { 
        JOptionPane.showMessageDialog(null,"This is not a valid position"); 
       } 
      } 
     }); 

답변

1

몇 가지.

static 클래스에서 delete 메서드를 만들 수 있습니다. 당신은의 기존 인스턴스에 대한 참조를 전달하여이

value = MyClass.deleteMethod(); 

당신은

MyClass myClass = new MyClass(); 
value = myClass.deleteMethod(); 

당신은 종류의 포인터를 사용하여 할 수있는 방법을 수행하는 새로운 클래스를 만들 수 있습니다 참조 할 것 delete 메서드를 보유한 클래스를 호출 할 위치로 이동합니다.

myFunction(MyClass myClass) 
{ 
    value = myClass.deleteMethod(); 
} 

는 기본적으로 값

public static int deleteMethod() 
{ 
} 

이 함수는 int를 돌려을 반환하는 함수를 설정합니다.

또는 그 이상을 반환해야하는 경우 다음 그래서

Myclass myClass = new MyClass(); 
myClass.deleteMethod(); 
value1 = myClass.value1 
value2 = myClass.Value2 
value3 = myClass.Value3 
+1

덕분에 짝처럼 삭제 호출 한 후

class MyClass { public int value1; public int value2; public String value3; public void deleteMethod() { //does something with global variables } } 

이제 정보를 가져 오는 정보

의 전역 변수와 클래스를 설정! 많이 도와 줬어! :) – Shonu93

+0

문제 없음 broski – WIllJBD

관련 문제