java复选框互斥_使用setValueAt重新创建互斥复选框
时间: 2023-12-24 20:04:14 浏览: 75
jquery-toggle-checkboxes:一个简单的jQuery插件,可以根据另一个复选框的更改状态来取消选中页面上所有已启用的复选框
在 Java 中,可以通过 JCheckBox 类来创建复选框,而实现复选框的互斥操作可以通过 setValueAt 方法来实现。
下面是一个简单的示例代码,实现了三个复选框的互斥操作:
```
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
public class CheckBoxTable extends JFrame {
private JTable table;
public CheckBoxTable() {
setTitle("CheckBoxTable");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 200);
// 创建表格
String[] header = {"Name", "Value"};
Object[][] data = {{"CheckBox1", false},
{"CheckBox2", false},
{"CheckBox3", false}};
DefaultTableModel model = new DefaultTableModel(data, header) {
@Override
public Class<?> getColumnClass(int columnIndex) {
return getValueAt(0, columnIndex).getClass();
}
};
table = new JTable(model) {
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
JComponent jc = (JComponent) c;
jc.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
return c;
}
};
// 设置表格列宽
table.getColumnModel().getColumn(0).setPreferredWidth(100);
table.getColumnModel().getColumn(1).setPreferredWidth(100);
// 设置表格的编辑器
table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(new JCheckBox()));
// 添加监听器
model.addTableModelListener(e -> {
int row = e.getFirstRow();
int column = e.getColumn();
DefaultTableModel model1 = (DefaultTableModel) e.getSource();
Boolean checked = (Boolean) model1.getValueAt(row, column);
for (int i = 0; i < model1.getRowCount(); i++) {
if (i != row) {
model1.setValueAt(false, i, column);
}
}
});
// 添加表格到窗口
add(new JScrollPane(table));
}
public static void main(String[] args) {
CheckBoxTable checkBoxTable = new CheckBoxTable();
checkBoxTable.setVisible(true);
}
}
```
在这个示例代码中,我们创建了一个 JTable 对象,并设置了表格的列宽和编辑器。其中,编辑器使用了 JCheckBox 对象来实现复选框的显示和编辑。
在添加监听器时,我们重写了 DefaultTableModel 类的 setValueAt 方法,实现了复选框的互斥操作。当其中一个复选框被选中时,我们遍历整个表格,将其他复选框的值都设为 false,从而实现了互斥操作。
注意,在这个示例代码中,我们使用了匿名类来实现了 DefaultTableModel 类的 getColumnClass 方法和 addTableModelListener 方法的重写。这是为了更好地展示代码,如果需要使用多次,建议将这些代码封装成单独的类或方法。
阅读全文