繁体   English   中英

更改另一个类中没有静态变量的变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM