给jtable添加单选框最简单的代码
时间: 2023-06-05 16:06:30 浏览: 86
以下是一个简单的示例代码,向 JTable 中添加单选框列:
```
import javax.swing.*;
import javax.swing.table.*;
public class RadioButtonTableExample extends JFrame {
public RadioButtonTableExample() {
Object[][] data = {
{ "Apple", new Integer(60), new Boolean(false) },
{ "Orange", new Integer(70), new Boolean(false) },
{ "Banana", new Integer(80), new Boolean(false) },
{ "Grapes", new Integer(90), new Boolean(false) }
};
String[] columnNames = { "Fruit", "Price", "Select" };
DefaultTableModel model = new DefaultTableModel(data, columnNames) {
@Override
public Class<?> getColumnClass(int column) {
return column == 2 ? Boolean.class : String.class;
}
};
JTable table = new JTable(model);
table.getColumnModel().getColumn(2).setCellRenderer(new RadioButtonRenderer());
table.getColumnModel().getColumn(2).setCellEditor(new RadioButtonEditor(new JCheckBox()));
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 150);
setVisible(true);
}
public static void main(String[] args) {
new RadioButtonTableExample();
}
}
class RadioButtonRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
public RadioButtonRenderer() {
setHorizontalAlignment(SwingConstants.CENTER);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value == null)
return null;
JRadioButton button = new JRadioButton();
button.setSelected((Boolean) value);
return button;
}
}
class RadioButtonEditor extends DefaultCellEditor implements ItemListener {
private static final long serialVersionUID = 1L;
private JRadioButton button;
public RadioButtonEditor(JCheckBox checkBox) {
super(checkBox);
button = new JRadioButton();
button.addItemListener(this);
button.setHorizontalAlignment(SwingConstants.CENTER);
setClickCountToStart(1);
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if (value == null)
return null;
button.setSelected((Boolean) value);
return button;
}
@Override
public Object getCellEditorValue() {
return button.isSelected();
}
@Override
public void itemStateChanged(ItemEvent e) {
super.fireEditingStopped();
}
}
```
在这个例子中,我们使用了两个自定义类 `RadioButtonRenderer` 和 `RadioButtonEditor` 来渲染和编辑单选框列。我们还重写了 `DefaultTableModel` 的 `getColumnClass` 方法,以指定需要渲染和编辑为单选框的列。
希望对你有所帮助!
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)