java - Jcheckbox 在 Swing Java 中总是返回假
问题描述
我正在使用 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 中的代码会运行一次。您正在检查复选框是否在面板中创建后立即被选中。该代码正在检查您新添加的复选框是否被选中(当然还没有人单击它们)然后完成。他们再也不会被检查。
解决方案是将此选择检查移动到事件处理程序中。但在我们到达那里之前,您的代码中有第二个错误。
while(res.next()){
checkBoxes.add(new JCheckBox(res.getString("NAME")));
panel.add(new JCheckBox(res.getString("NAME")));
};
添加到 checkBoxes 数据结构的复选框和添加到面板的复选框是两个不同的复选框。每次在 Java 中使用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());
}
}
});
}
推荐阅读
- json - 无效的 utf-8 起始字节 0xb0
- websphere - WSVR0009E: 启动期间发生错误,org.omg.CORBA.INTERNAL: CREATE_LISTENER_FAILED_4
- c++ - 如何在 QT 中制作模态 QProgressDialog?
- xamarin - 如何删除添加到 main() 方法的子页面?
- c# - .NET 接口如何包含数据
- java - 如何使用 JPA 处理 INSERT 中的空值?
- r - 从非对称矩阵中获取上三角矩阵
- javascript - AngularJS - Checklist-Model 在复选框更改时未正确更新模型
- c - C 将 ... 传递给函数
- google-sheets - 根据 Google 电子表格中的另一列汇总查询结果