내가 지금 쓰고있는 프로그램에서, 나는 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;
}
이 질문에서 코드와 텍스트의 양을 줄이고 좀 더 명확하고 명확한 질문을 내놓을 수 있습니까? –
'cancel' 액션과 버튼 –
이 포함 된 클래스에 대한 완전한 코드를 넣으면, 취소 버튼 액션 리스너에있는'MainWindow' 클래스의 인스턴스가 다릅니다 ... –