1

我正在做一个项目,因为我在主类中管理多个窗口。从标题可以看出,我在窗口中遇到了 JButtons 的问题。main 方法将等待一个特定的按钮被按下:

public static void main(String[] args){
    ButtonWindow bw = new ButtonWindow();
    while(bw.buttonClicked() == false);
    System.out.println("ok cool");
}

同时,按钮的 ActionListener 将触发 boolean d(方法 buttonClicked() 返回的那个)设置为 true。

public boolean d = false;
public ButtonWindow(){
    JPanel cp;
    JButton b;
    setContentPane(cp = new JPanel());
    cp.add(b = new JButton("Click me"));
    b.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            d = true;
        }
    });
    setSize(200, 200);
    setVisible(true);
}
public boolean buttonClicked() {
    return d;
}

现在,似乎 main 方法卡在了 while 循环中。这怎么可能,因为“d”被更改(我在按钮的 ActionListener 中使用额外的“System.out.println("" + d);" 将其签入)?

提前致谢

哦,还有,有没有更聪明的方法呢?我不认为连续调用这个方法是最实际的事情,真的。

4

2 回答 2

1

我在主类中管理多个窗口。

一个应用程序应该只有一个 JFrame 和应用程序的主窗口。

对于辅助窗口,您通常会使用modal JDialog. 在对话框关闭之前不会继续执行。

在许多情况下,您可以使用 JOptionPane 为您管理对话框。阅读 Swing 教程中有关如何制作对话框的部分以获取更多信息。

于 2013-06-08T15:01:56.137 回答
0

你应该这样做:

public static void main(String[] args){
    ButtonWindow bw = new ButtonWindow();       
}

public void actionPerformed(ActionEvent e) {
if(e.getSource().getText().equals("Click me"))
System.out.println("ok cool");

}

第二种方法:-

使您的flag变量static,创建新的线程类,并使用不断检查类flag变量值的线程进行循环。您也可以将flag变量设置为实例变量,但在这种情况下,您的对象引用必须在线程之间共享。

于 2013-06-08T11:07:45.143 回答