如何人工触发动作命令?

时间:2016-11-20 06:19:22

标签: java swing

我有两个带有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;命令?

2 个答案:

答案 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);