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

Java 滚动窗格中所有复选框的操作侦听器?,java,swing,user-interface,events,Java,Swing,User Interface,Events,我在Java Swigs工作。我有两个滚动窗格,包含n1和n2个复选框。如果选中了第一个滚动窗格中的复选框,则必须禁用第二个滚动窗格中的相应复选框,反之亦然。是否需要在所有复选框上添加actionlistener?如果我有20个复选框,那么添加20个动作监听器似乎有点困难。有更好的方法吗?您必须将侦听器绑定到每个复选框。但是,您可以编写一个简单的方法来循环滚动窗格的所有组件,过滤那些复选框,并将侦听器绑定到每个组件。这样可以避免手动将侦听器绑定到每个复选框。必须将侦听器绑定到每个复选框。但是,您

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

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

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

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

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

有更好的方法吗

如果您有几个组件,请考虑使用一个数组来允许您对组件进行循环。您可以实现许多

ActionListener
,每个组件一个,或者使用一个
ActionListener
。如果是后者,则可以通过检查事件源来检查触发事件的组件

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]);
}
final int totalNumber=20;
最终JCheckBox[]框=新JCheckBox[totalNumber];
ActionListener myListener=新建ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
组件c=(组件)e.getSource();
对于(int i=0;i
是否需要在所有复选框上添加actionlistener

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

有更好的方法吗

如果您有几个组件,请考虑使用一个数组来允许您对组件进行循环。您可以实现许多

ActionListener
,每个组件一个,或者使用一个
ActionListener
。如果是后者,则可以通过检查事件源来检查触发事件的组件

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]);
}
final int totalNumber=20;
最终JCheckBox[]框=新JCheckBox[totalNumber];
ActionListener myListener=新建ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
组件c=(组件)e.getSource();
对于(int i=0;i