菜鸟学习ing
class CheckDefaultModel extends DefaultTableModel
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Test2; import javax.swing.table.DefaultTableModel; /** * * @author Administrator */ public class CheckDefaultModel extends DefaultTableModel { Object[] columns; Object[][] data ; public CheckDefaultModel(Object[][] data, Object[] columnNames) { super(data, columnNames); } public Class<?> getColumnClass(int columnIndex) { return getValueAt(0, columnIndex).getClass(); } public void setAllSelected(boolean value) { for (int i = 0; i < getRowCount(); i++) { this.setValueAt(value, i, 0); } } }
class TableHeaderRender implements TableCellRenderer
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Test2; import java.awt.Component; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; /** * * @author Administrator */ public class TableHeaderRender implements TableCellRenderer { JTable table; JTableHeader tableHeader; CheckDefaultModel model; JCheckBox headerBox; public TableHeaderRender(JTable table) { this.table = table; this.tableHeader = table.getTableHeader(); this.model = (CheckDefaultModel) table.getModel(); headerBox = new JCheckBox(model.getColumnName(0)); headerBox.setSelected(false); tableHeader.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int selectColumn = tableHeader.columnAtPoint(e.getPoint()); if (selectColumn == 0) { boolean value = !headerBox.isSelected(); headerBox.setSelected(value); model.setAllSelected(value); tableHeader.repaint(); } } }); } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { String valueStr = (String) value; JLabel label = new JLabel(valueStr); JComponent component = (column == 0) ? headerBox : label; return component; } }
class TableTester extends JFrame
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Test2; import java.awt.BorderLayout; import java.awt.Dimension; import javax.swing.DefaultCellEditor; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.border.EmptyBorder; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; /** * * @author Administrator */ public class TableTester extends JFrame { JPanel contentPanel = new JPanel(); JTable table = new JTable(); Object[] columns = {"choose"}; Object[][] data = {{new Boolean(true)}, {new Boolean(false)}, {new Boolean(false)}}; public TableTester() { setTitle("CheckBox Table2"); setPreferredSize(new Dimension(300, 200)); setLocationRelativeTo(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPanel.setLayout(new BorderLayout()); add(contentPanel, BorderLayout.NORTH); JScrollPane scrollPane = new JScrollPane(table); scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); contentPanel.add(scrollPane, BorderLayout.NORTH); initTable(); } public void initTable() { table.setModel(new CheckDefaultModel(data, columns)); table.getTableHeader().setDefaultRenderer(new TableHeaderRender(table)); } public static void main(String[] args) { new TableTester().setVisible(true); } }