如何从ActionEvent获取所有JButton组件的源代码?

时间:2012-12-29 22:17:05

标签: java swing user-interface

我正在尝试实现一个包含两个按钮YesNo的简单窗口。

点击Yes时,我想停用No按钮,按下No时,我想要停用Yes按钮。

我已实施:

JButton btnYes = new JButton("Yes");
contentPane.add(btnYes);
btnYes.setActionCommand("Yes");
btnYes.addActionListener(this);

... No按钮的内容相同......

现在我正在用这种方法捕捉事件:

public void actionPerformed(ActionEvent e) {
    if(e.getActionCommand().equals("Yes"))
    {
        //I know how to get the button that caused the event 
        //but I don't know how to disable the OTHER button.
        JButton source = (JButton)e.getSource();
        //Handle the source button...
    }

}

在上面的方法中,我可以访问导致事件的按钮,但不能访问其他按钮。

获取按钮的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

您应该只将ActionListener实现为Dialog类的嵌套类,在这种情况下,您将拥有对外部类的所有字段的完全访问权限(在创建它们时应该存储对按钮的引用)。

坏的解决方案(不应该使用)仍然存在:通过JButton的getParent()导航到battens,然后通过parent children的getChildren()导航。只是为了证明它无论如何都是可能的。

答案 1 :(得分:1)

您可以使用JButton数组作为类成员变量,并检查 didnt 导致事件的实例:

for (JButton button: buttonArray) {
   if (button != source) {
      button.setEnabled(false); // disable the other button
   }
}