1、重写一个单元格渲染类
public class CheckBoxRenderer extends JCheckBox implements TableCellRenderer { private static final long serialVersionUID = 1L; Border border = new EmptyBorder(1, 2, 1, 2); public CheckBoxRenderer() { super(); setOpaque(true); setHorizontalAlignment(SwingConstants.CENTER); setBackground(Color.WHITE); } public CheckBoxRenderer(String text, boolean selected) { super(text, selected); setOpaque(true); setHorizontalAlignment(SwingConstants.CENTER); setBackground(Color.WHITE); } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value instanceof Boolean) { setSelected(((Boolean) value).booleanValue()); } return this; } }
2、重写单元格编辑类
class CheckBoxCellEditor extends AbstractCellEditor implements TableCellEditor { private static final long serialVersionUID = 1L; protected JCheckBox checkBox; public CheckBoxCellEditor() { checkBox = new JCheckBox(); checkBox.setHorizontalAlignment(SwingConstants.CENTER); checkBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { } }); } @Override public Object getCellEditorValue() { return Boolean.valueOf(checkBox.isSelected()); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if (value != null) { checkBox.setSelected(((Boolean) value).booleanValue()); } return checkBox; } }
3、给列添加渲染类和编辑类
CheckBoxRenderer checkBoxRenderer = new CheckBoxRenderer(); CheckBoxCellEditor checkBoxCellEditor = new CheckBoxCellEditor(); table.getColumnModel().getColumn(5).setCellRenderer(checkBoxRenderer); table.getColumnModel().getColumn(5).setCellEditor(checkBoxCellEditor);