定义自己的渲染器
class RadioButtonRenderer implements TableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value == null) { return null; } return (Component) value; } }
class RadioButtonEditor extends DefaultCellEditor { private JRadioButton button; public RadioButtonEditor(JCheckBox checkBox) { super(checkBox); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if (value == null) { return null; } button = (JRadioButton) value; return (Component) value; } public Object getCellEditorValue() { return button; } }
public void loadtable() { DefaultTableModel model = ((DefaultTableModel) jTable1.getModel()); model.setRowCount(0); int countRows = jTable1.getRowCount();//获取当前表格总行数 jTable1.setRowHeight(25); Vector dataVector = new Vector(); for(int i=0; i<5; i++) { Vector data = new Vector(); data.add("开关" + i); final JRadioButton btn = new JRadioButton(); btn.setText("关闭"); btn.setSelected(false); btn.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if(btn.isSelected()) { btn.setText("打开"); } else { btn.setText("关闭"); } } }); data.add(btn); dataVector.add(data); } Vector columnIdentifiers = new Vector(); columnIdentifiers.add("测试"); columnIdentifiers.add("测试1"); model.setDataVector(dataVector, columnIdentifiers); jTable1.setModel(model); jTable1.getColumn("测试1").setCellEditor(new RadioButtonEditor(new JCheckBox())); jTable1.getColumn("测试1").setCellRenderer(new RadioButtonRenderer()); // //设置表格的列宽 // jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS); // jTable1.getColumn("测试1").setPreferredWidth(80); // jTable1.getColumn("测试1").setMinWidth(80); // jTable1.getColumn("测试1").setMaxWidth(80); }
最终效果图: