java复选框互斥_使用setValueAt重新创建互斥复选框
时间: 2023-12-24 15:05:34 浏览: 29
首先,需要了解复选框互斥的原理。在同一个复选框组中,只能有一个复选框被选中,其他复选框都应该处于未选中状态。
在Java中,可以使用JCheckBox类来创建复选框,并使用ButtonGroup类来将多个复选框组合在一起形成一个复选框组。
如果需要在复选框被选中时执行一些操作,可以添加ItemListener监听器。
如果需要实现复选框互斥,可以在ItemListener中使用setValueAt方法重新设置复选框的选中状态。
以下是一个示例代码,实现了复选框互斥的功能:
```java
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
class CheckBoxListener implements ItemListener {
private JTable table;
private TableModel model;
public CheckBoxListener(JTable table) {
this.table = table;
this.model = table.getModel();
}
public void itemStateChanged(ItemEvent e) {
int row = table.getEditingRow();
int col = table.getEditingColumn();
if (row >= 0 && col >= 0) {
Boolean value = (Boolean) model.getValueAt(row, col);
value = !value;
model.setValueAt(value, row, col);
// 设置互斥
for (int i = 0; i < model.getRowCount(); i++) {
if (i != row) {
model.setValueAt(false, i, col);
}
}
}
}
}
public class CheckBoxTable extends JFrame {
private JTable table;
private DefaultTableModel model;
private ButtonGroup group;
private CheckBoxListener listener;
public CheckBoxTable() {
model = new DefaultTableModel(new Object[][]{
{"Java", false},
{"Python", false},
{"C++", false},
{"JavaScript", false},
}, new Object[]{"语言", "选中"});
table = new JTable(model);
table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(new JCheckBox()));
group = new ButtonGroup();
listener = new CheckBoxListener(table);
for (int i = 0; i < model.getRowCount(); i++) {
JCheckBox checkBox = new JCheckBox();
checkBox.addItemListener(listener);
group.add(checkBox);
table.setValueAt(checkBox, i, 1);
}
add(new JScrollPane(table));
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new CheckBoxTable();
}
}
```
在这个示例中,通过重写ItemListener中的itemStateChanged方法,使用setValueAt方法重新设置复选框的选中状态,并设置其他复选框的选中状态为false,从而实现了复选框互斥的功能。