我的JFrame中有11个不同的复选框,并且希望能够在检查完一个总数时检查一个数字。我知道如何设置一个ItemListener,看看是否有一个被检查,但我不知道如何检查所有这些..
编辑:
cblist是一个包含11个JCheckBoxes的ArrayList。我给每个JCheckBox一个项目监听器,这里是单击复选框时使用的类...
private class CheckClass implements ItemListener{
public void itemStateChanged(ItemEvent event){
for(cblist.isChecked){
ingnum++;
}
}
}
在for循环中,我如何测试ArrayList的所有元素..我现在理解我的语法不正确。
答案 0 :(得分:6)
一种方法:将所有JCheckBox放在一个数组或ArrayList<JCheckBox>
中,并在需要时,只需遍历列表即可查看选中的复选框。
另一种可能的解决方案:如果你有一个表格结构,使用一个在其模型中保存布尔值的JTable,然后在需要时迭代TableModel的行以查看哪些行包含Boolean.TRUE值。
答案 1 :(得分:2)
我的提议(可能不是最好的)是将所有选中的CheckBox保留在列表中。
所以对于所有JCheckBoxex的监听器都是这样的:
void stateChanged(ChangeEvent e){
if( CheckBox is checked){
// add the checkbox in the list.
} else {
// remove CheckBox in the list.
}
}
要知道检查了多少个复选框,只需计算列表的大小。
问候。
答案 2 :(得分:2)
您可以保留全局计数器countChecked
并制作框架implements ItemListener
表示框架JCheckBox
中的所有chkBox.addItemListener(this)
并处理事件
public class MyFrame extends JFrame implements ItemListener{
private int countChecked = 0;
private JPanel contentPane;
public MyFrame() {
contentPane = new JPanel();
setContentPane(contentPane);
JCheckBox chckbx = new JCheckBox("New check box");
contentPane.add(chckbx, BorderLayout.CENTER);
chckbx.addItemListener(this);
}
@Override
public void itemStateChanged(ItemEvent ie) {
if(ie.getSource().getClass() == JCheckBox.class)
{
if(ie.getStateChange() == ie.SELECTED)
countChecked++;
else if(ie.getStateChange() == ie.DESELECTED)
countChecked--;
}
}
}
答案 3 :(得分:1)
添加&#34; ActionPerformed&#34;所有复选框的事件监听器&amp;在事件处理程序方法中调用此方法以获取已检查复选框的数量:
int countCheckedCheckBoxes(){
Component[] cs = getRootPane().getComponents();
int checkNums = 0;
for(Component c : cs){
if(c instanceof JCheckBox){
if(((JCheckBox)c).isSelected()){
checkNums++;
}
}
}
return checkNums;
}
getRootPane应该返回主面板上的组件。