Java按钮,动作事件&听众

时间:2018-05-28 13:03:47

标签: java for-loop button actionlistener actionevent

我目前正在为项目管理系统制作GUI。

无法弄清楚如何让Action Event正常工作。

以下代码行是我用于两者的代码。

    public  JPanel setupButtons(User u){

        JPanel forButtons = new JPanel();
ButtonGroup group = new ButtonGroup();

        for(int i = 0; i != u.projectSize(); i++){
            this.jRdBttn = new JRadioButton(u.getProject(i).getName());
            forButtons.add(jRdBttn);
            group.add(jRdBttn);

            jRdBttn.addActionListener(this);
            jRdBttn.setEnabled(true);
        }



    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if(e.getSource() == select){
            if(this.jRdBttn.isSelected()){
                System.out.println("It worked!!");
            }
        }
    }
}

只需要弄清楚我与动作听众的关系&行动事件。

1 个答案:

答案 0 :(得分:0)

假设所有与您的ActionListener有关的代码,这是您的回答:

您所有RadioButtons ActionListener。当 THE RADIO BUTTONS 被按下时,当然会调用它。 但是,在这些情况下,事件的来源永远不会成为名为select的其他按钮。

您似乎想在按下ActionListener按钮时致电select。这意味着该按钮需要ActionListener而不是RadioButtons

作为旁注:

this.jRdBttn = new JRadioButton(u.getProject(i).getName());

这意味着this.jRdBttn将只包含您在该循环结束时创建的最后一个RadioButton。所有其他人将永远丢失,因为你没有更多的直接引用它们(当然你实际上仍然在你的组件层次结构中有它们,但是再次使用它们是一种痛苦)。

---编辑29.05.2018 ---

如果你想在每次单击一个单选按钮时做出反应(我认为这意味着你的评论)而不需要选择按钮,那么有多种方法可以实现这一点。

您使用哪种方式取决于您的使用案例。

如果我们尽可能地接近您当前的方法,我们可能需要将所有RadioButton存储在一个数组中,然后遍历该数组以找到当前选定的按钮。 您甚至不需要查看ActionEvent或它的源代码,因为您并不真正关心哪个RadioButton只是按下了,只有当前选择了哪一个。

当然,您可能会认为刚刚按下的按钮是被选中的按钮,但是使用您当前的方法,您仍然必须遍历数组以查找索引(我假设您可能需要访问相应的项目),这基本上使它毫无意义。

所以第一步:在你的课堂上,添加:

private JRadioButton[] radioButtons;

下一步:

public  JPanel setupButtons(User u){

    JPanel forButtons = new JPanel();
    ButtonGroup group = new ButtonGroup();
    radioButtons = new JRadioButton[u.projectSize()]; // <- This is new

    for(int i = 0; i != u.projectSize(); i++){
        radioButtons[i] = new JRadioButton(u.getProject(i).getName());
        forButtons.add(radioButtons[i]);
        group.add(radioButtons[i]);

        radioButtons[i].addActionListener(this);
        radioButtons[i].setEnabled(true);
    }
}

最后但并非最不重要:

public void actionPerformed(ActionEvent e) {
    for (int i = 0; i < radioButtons.length; i++) {
         if (radioButtons[i].isSelected()) {
             System.out.println("Button " + i + " was selected!");
             // Optionally, you might want to put a break; here
         }
    }
}