我在Java Swings工作。我有两个scrollpanes包含n1和n2个复选框。如果选中第一个滚动窗格中的复选框,则必须在第二个滚动窗格中禁用相应的复选框,反之亦然。我是否需要在所有复选框上添加actionlistener?如果我说20个复选框,添加20个动作监听器似乎有点工作。有没有更好的方法呢?
答案 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)
您必须将侦听器绑定到每个复选框。但是,您可以编写一个简单的方法,循环遍历滚动窗格的所有组件,过滤那些复选框,并将侦听器绑定到每个组件。这样可以避免手动将侦听器绑定到每个复选框。