Jcheckbox在Swing Java中始终返回false

问题描述 投票:0回答:1

我正在使用Java和Swing,我想要定义的只是测试是否选中了Jcheckbox,如果将其文本添加到字符串列表中,问题是isSelected功能始终返回False,即使如果选中该复选框。这是我写的代码:

List<JCheckBox> checkBoxes = new ArrayList<JCheckBox>();
List<String> infos = new ArrayList<String>();
String sql = "select NAME from drugs ";
pre=con.prepareStatement(sql); 
res=pre.executeQuery(); 
while(res.next()){
    checkBoxes.add(new JCheckBox(res.getString("NAME")));
    panel.add(new JCheckBox(res.getString("NAME")));
}; 
for (JCheckBox checkBox : checkBoxes) {
    if (checkBox.isSelected()) {
        infos.add(checkBox.getText());
    }
}
java swing jcheckbox
1个回答
0
投票

除非您在循环中编写代码,否则Java中的代码将运行一次。您正在检查在面板中创建复选框后是否立即选中了该复选框。代码正在检查是否选中了您新添加的复选框(当然还没有人单击过它们)然后完成。他们再也不会检查。

解决方案是将选择检查移到事件处理程序中。但是在到达那里之前,您的代码中出现了第二个错误。

while(res.next()){
    checkBoxes.add(new JCheckBox(res.getString("NAME")));
    panel.add(new JCheckBox(res.getString("NAME")));
};

您添加到checkboxes数据结构中的复选框和添加到面板中的复选框是两个不同的复选框。每次在Java中使用new关键字时,都会创建一个new独立对象。在您的情况下,您真正​​需要的是创建1个新复选框,并将其放在面板中,并将其存储在数据结构中。

解决方案:

while(res.next()){
    JCheckBox checkBox = new JCheckBox(res.getString("NAME"));
    checkBoxes.add(checkBox);
    panel.add(checkBox);
};

现在我们可以继续创建事件处理程序。事件处理程序将对某人单击该复选框进行反应,并运行检查复选框状态的代码以应用所有更改。可以将满足您需求的事件处理程序示例编码如下:

checkBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    infos.add(checkBox.getText());
                }
                if (e.getStateChange() == ItemEvent.DESELECTED) {
                    infos.remove(checkBox.getText());
                }
            }
});

现在,当我们将代码与所有修复一起加入时,我们会得到:

while(res.next()){
    JCheckBox checkBox = new JCheckBox(res.getString("NAME"));

    checkBoxes.add(checkBox);
    panel.add(checkBox);

    checkBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    infos.add(checkBox.getText());
                }
                if (e.getStateChange() == ItemEvent.DESELECTED) {
                    infos.remove(checkBox.getText());
                }
            }
    });
}

© www.soinside.com 2019 - 2024. All rights reserved.