查看是否从父类单击了JButton

时间:2013-06-08 10:58:21

标签: java swing awt jbutton actionlistener

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

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;
}

现在,似乎主要方法停留在while循环中。这怎么可能,因为“d”已经被更改了(我在按钮的ActionListener中用额外的“System.out.println(”“+ d);”检查了它?)

提前致谢

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

2 个答案:

答案 0 :(得分:1)

  

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

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

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

在许多情况下,您可以使用JOptionPane为您管理对话框。有关详细信息,请阅读How to Make Dialogs上的Swing教程中的部分。

答案 1 :(得分: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变量静态,创建新的线程类,并使用不断检查类flag变量值的线程进行循环。您还可以将flag变量设为实例变量,但在这种情况下,您的对象引用必须跨线程共享。