我有两个带有ActionListener的JRadioButton对象:
for (JRadioButton b : rightRButtons) {
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Unidade")) {
disableAllComponents(divisiblePanel);
enableAllComponents(unityPanel);
} else if (e.getActionCommand().equals("Divisível")) {
disableAllComponents(unityPanel);
enableAllComponents(divisiblePanel);
}
}
});
}
在代码的某处,我选择其中一个:rdbtnCreationDivisible.setSelected(true);
这些单选按钮一旦点击,就会禁用各自面板上的所有组件。当我使用setSelected方法选择它们时,组件不会被禁用。如何人工触发动作命令,以便ActionListener可以“捕捉”#34;命令?
答案 0 :(得分:3)
你可以尝试一些事情:
首先,您可以循环浏览添加到按钮的所有ActionListeners
,然后调用它的actionPerformed()
方法,并使用您喜欢的任何ActionEvent
传递ActionCommand
:< / p>
for(ActionListener al : b.getActionListeners()) {
al.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "Unidade") { });
}
另一种选择是将ActionListener
替换为ItemListener
。选择/取消选择按钮时会调用此方法,而不是单击该按钮:
b.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
//Will get called when you change selection using .setSelected()
}
});
Nemi提供了有关在其答案中使用ItemListener
而不是ActionListener
的更多信息:Detecting a JRadioButton state change
答案 1 :(得分:0)
您可以create your own event然后将其传递给dispatchEvent。
rdbtnCreationDivisible.setSelected(true);
ActionEvent fakeEvent = new ActionEvent(rdbtnCreationDivisible,
ActionEvent.ACTION_PERFORMED, "Divisível");
rdbtnCreationDivisible.dispatchEvent(fakeEvent);