滚动窗格中所有复选框的动作侦听器?

时间:2016-08-22 21:00:09

标签: java swing user-interface events

我在Java Swings工作。我有两个scrollpanes包含n1和n2个复选框。如果选中第一个滚动窗格中的复选框,则必须在第二个滚动窗格中禁用相应的复选框,反之亦然。我是否需要在所有复选框上添加actionlistener?如果我说20个复选框,添加20个动作监听器似乎有点工作。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:3)

  

我是否需要在所有复选框上添加actionlistener?

是的,如果您希望能够响应该组件触发的事件。

  

有更好的方法吗?

如果您有多个组件,请考虑使用数组来循环组件。您可以实现多个ActionListener - 每个组件一个 - 或使用单个ActionListener。如果是后者,您可以通过检查事件的来源来检查触发事件的Component。

final int totalNumber = 20;
final JCheckBox[] boxes = new JCheckBox[totalNumber ];
ActionListener myListener = new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e){
        Component c = (Component)e.getSource();
        for ( int i = 0; i < totalNumber; i++ ){
            if ( c == boxes[i] ){//this is the component that fired the event
                //do something
            }
        }
    } 
};
for ( int i = 0; i < totalNumber; i++ ){
    boxes[i] = new JCheckBox("Box " + i);
    boxes[i].addActionListener(myListener);
    parentContainer.add(boxes[i]);
}

答案 1 :(得分:0)

您必须将侦听器绑定到每个复选框。但是,您可以编写一个简单的方法,循环遍历滚动窗格的所有组件,过滤那些复选框,并将侦听器绑定到每个组件。这样可以避免手动将侦听器绑定到每个复选框。