在我目前正在编写的程序中,我有 2 个 JFrame(每个在不同的类中,每个都有不同的用途,但是您可以将小部件框架视为某种奴隶),一个是主窗口,另一个是在主窗口中点击按钮时弹出的“小部件”。我只想一次打开一个小部件的副本。我目前正在通过 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 成为静态变量?(我应该使用 getter 和 setter 对吗?)我做错了什么,我对实例化 main 的新实例有什么不理解每次单击该按钮时都会出现窗口?
此外,我的 getter 和 setter 标准如下。
void setOpenWidget(boolean val){
this.openWidget = val;
}
boolean getOpenWidget(){
return this.openWidget;
}