我想问一下有没有办法不用actionListener就可以从JCheckBox获取信息。在我的代码中,我扫描了一个字符串文件,每一行都有数据,如果被选中,应该将这些数据添加到我程序中的一个数组中。问题是我永远不知道我将拥有多少个 JCheckBox,这取决于文件。
所以,我的问题是如何通过按下按钮 (ok) 将选定的字符串放入数组(或列表),这样我就可以用它们做其他事情(在我的例子中,我需要从文件或从手动输入并将其放入红黑树中,因此我需要将选定的字符串推送到我的 putDataInTheTree 方法)。
编辑:另外,是否可以不显示那些已经添加到程序中的 JCheckBoxes? IE。如果我选择流体,下次我调用输入法时,流体不会显示在我的面板中吗?
提前致谢!
外观:
到目前为止我的代码是:
public void input() {
try {
mainWindow.setEnabled(false);
fromFile = new JFrame("Input from file");
fromFile.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
fromFile.setLayout(new BorderLayout());
fromFile.setSize(300,200);
panelFromFile = new JPanel();
panelFromFile.setLayout(new java.awt.GridLayout(0,1));
JScrollPane scrollPane2 = new JScrollPane(panelFromFile);
scrollPane2.setMaximumSize(new Dimension(300, 180));
FileReader File = new FileReader(data);
BufferedReader Buffer = new BufferedReader(File);
while ((info = Buffer.readLine()) != null) {
if (info != null) {
JCheckBox check = new JCheckBox(info);
panelFromFile.add(check);
}
}
ok = new JButton("ok");
ok.addActionListener(this);
fromFile.add(scrollPane2, BorderLayout.CENTER);
fromFile.add(ok, BorderLayout.SOUTH);
fromFile.setLocationRelativeTo(null);
fromFile.setResizable(false);
fromFile.setVisible(true);
}
catch(Exception e) {
text.append("Error in INPUT method");
text.append(System.getProperty("line.separator"));
}
}
最佳答案
将您的复选框添加到集合中,当按下按钮时,遍历复选框并获取与每个选中的复选框关联的文本:
private List<JCheckBox> checkBoxes = new ArrayList<JCheckBox>();
...
while ((info = Buffer.readLine()) != null) {
if (info != null) {
JCheckBox check = new JCheckBox(info);
panelFromFile.add(check);
this.checkBoxes.add(check);
}
}
...
public void actionPerformed(ActionEvent e) {
List<String> infos = new ArrayList<String>();
for (JCheckBox checkBox : checkBoxes) {
if (checkBox.isSelected() {
infos.add(checkBox.getText());
}
}
// TODO do something with infos
}
关于java - 获取 JCheckBox 选中框的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13432941/