2013-03-29 2 views
0

내가 지금 쓰고있는 프로그램에서, 나는 2 개의 JFrames를 가지고있다. (각기 다른 클래스에있다. 각기 다른 목적이있다. 그러나 위젯 프레임을 어떤 종류의 노예라고 생각할 수있다.) 하나는 main 다른 하나는 메인 윈도우의 버튼을 눌렀을 때 팝업되는 '위젯'입니다. 한 번에 하나의 위젯 복사본 만 열어 둡니다. 현재 actionPerformed 액션 리스너에서 부울 변수를 통해이 작업을 수행하고 있습니다. 아래는 메인 윈도우의 액션 리스너입니다.정적 변수없이 다른 클래스의 변수 변경?

public void actionPerformed(ActionEvent e) { 

        if(getOpenWidget() == false){ 
         System.out.println(getOpenWidget()); //test line 
         widget.initialize(); // please note that the instance "widget" is declared just after "public class MainWindow{" :) 
         widget.frame.setVisible(true); 
         setOpenWidget(true); 
         System.out.println(getOpenWidget()); // test line 

        }else{ 
         System.out.println(getOpenWidget()); 
         JOptionPane.showMessageDialog(frame, "There is already an instance of the Booking Widget open."); 
        } 
       } 

이제 예약 위젯이 열려 있습니다. 예약 위젯에는 취소 버튼이 있습니다. 아래는 위젯의 '취소'버튼에 대한 작업 수신기입니다.

btnCancel.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      MainWindow ui = new MainWindow(); 
      frame.dispose(); 
      ui.setOpenWidget(false); 
     } 
    } 

지금, 이론적으로, 다시 메인 창에 내 버튼을 눌렀을 때의 openWidget의 부울이 거짓해야하고, 그러나 취소 버튼 액션 청취자에, 내가 다른 창을 열 수, 내 변수 밤은이 변경되었습니다. 그래서 openWidget을 정적 변수로 만들지 않고 올바른 방법으로 문제를 해결할 것입니까? (getters와 setters를 올바르게 사용해야합니다.) 무엇이 잘못 되었습니까? 메인 윈도우를 그 버튼을 누를 때마다?

또한 getter 및 setters는 다음과 같이 주식 표준을 사용합니다.

void setOpenWidget(boolean val){ 
    this.openWidget = val; 
} 

boolean getOpenWidget(){ 
    return this.openWidget; 
} 
+0

이 질문에서 코드와 텍스트의 양을 줄이고 좀 더 명확하고 명확한 질문을 내놓을 수 있습니까? –

+0

'cancel' 액션과 버튼 –

+0

이 포함 된 클래스에 대한 완전한 코드를 넣으면, 취소 버튼 액션 리스너에있는'MainWindow' 클래스의 인스턴스가 다릅니다 ... –

답변

0

MainWindow에 대한 참조를 위젯 클래스에 전달하면 취소 버튼에서 해당 플래그를 업데이트 할 수 있습니다. 당신은 당신이 위젯 초기화 한있는 동일한 인스턴스를 사용하여이 줄 MainWindow ui = new MainWindow();

당신은 호출해야 setOpenWidget(false)를 사용하여 만든 다른 새로운 인스턴스에 setOpenWidget(false) 호출

+0

나는 어떻게 이해합니까? 당신이 간단한 예제를 제공해 주시겠습니까? - MainWindow의 인스턴스가 있는데 참조를 수행하는 방법이 확실하지 않습니다. – tgmars

+0

MainWindow의 인스턴스를 위젯 클래스의 생성자에 전달하고 인스턴스 변수에 저장합니다. 취소 버튼의 동작 수신기에서 참조하십시오. –

0

. 위젯 창 생성자를

widget = new Widget(this); 

을 변경 : 위젯을 만드는 동안 위젯이처럼 호출 할 수 있습니다 당신이 MainWindowwidget의 객체를 생성되는 참조

0

를 사용하여 setOpenWidget(false)를 호출 MainWindow를의 참조를 전달

MainWindow ui; 
public Widget(MainWindow mw) 
{ 
    this.ui = mw; 
    //...initialize btnCancel... 
    btnCancel.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      frame.dispose(); 
      ui.setOpenWidget(false); 
     } 
    }); 
    //..do all other stuffs here... 
} 
관련 문제