[英]Changing a variable in another class without a static variable?
在我目前正在编写的程序中,我有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布尔值应该为false,并允许我打开另一个窗口,但是在cancel button action侦听器中,我的变量未更改。 因此,我是否在没有使openWidget成为静态变量的情况下以正确的方式解决问题?(我应该正确使用getter和setter?)我做错了什么,对于实例化main的新实例我不了解每次单击该按钮时都会出现窗口?
另外,我的吸气剂和吸气剂是如下的库存标准。
void setOpenWidget(boolean val){
this.openWidget = val;
}
boolean getOpenWidget(){
return this.openWidget;
}
只需将对MainWindow的引用传递给Widget类,以便它可以在“取消”按钮上更新其标志。
您正在使用此行创建的其他一些新实例上调用setOpenWidget(false)
MainWindow ui = new MainWindow();
您应该使用与初始化小部件相同的实例调用setOpenWidget(false)
。 在创建小部件时将MainWindow的引用传递给小部件,并使用该引用调用setOpenWidget(false)
在MainWindow
中创建widget
的对象时,可以这样调用它:
widget = new Widget(this);
并如下更改窗口小部件窗口构造器:
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...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.