我正在尝试实现一个包含两个按钮Yes
和No
的简单窗口。
单击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...
}
}
在上面的方法中,我可以访问导致事件的按钮,但不能访问其他按钮。
获得按钮的最佳方式是什么?
您应该将ActionListener实现为Dialog类的嵌套类,在这种情况下,您将可以完全访问外部类的所有字段(在创建按钮时,您应该在其中存储对按钮的引用(。
坏的肮脏解决方案(不应该使用(仍然存在:通过JButton的getParent((,然后通过父子关系的getChildren((导航到battens。只是为了表明这是可能的。
您可以使用JButton
数组作为类成员变量,并检查哪个实例没有导致事件:
for (JButton button: buttonArray) {
if (button != source) {
button.setEnabled(false); // disable the other button
}
}