Table中的JCheckBox TableHeader的全选(全反选)效能

Table中的JCheckBox TableHeader的全选(全反选)功能

菜鸟学习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);
    }
}