在Table里加一列checkbox的代码如下: 不太明白选checkbox是怎么实现的?
JTable table = null;
private JTable getTable() {
        if (table == null) {
            table = new JTable();
            table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            
            
            table.setModel(new DefaultTableModel(data, columnNames) {
            
                public Class getColumnClass(int columnIndex) {
                    if (columnIndex == 0) {
                        return Boolean.class;
                    }
                    if (columnIndex == 1) {
                        return Date.class;
                    }
                    return super.getColumnClass(columnIndex);
                }
            
                public boolean isCellEditable(int row, int column) {
                    if (column == 0) {
                        return true;
                    }
                    return false;
                }
            
            });
            
            TableColumnModel columnModel = table.getTableHeader().getColumnModel();
            columnModel.getColumn(0).setMinWidth(40);
            columnModel.getColumn(0).setMaxWidth(40);
            columnModel.getColumn(1).setMaxWidth(100000);
            columnModel.getColumn(2).setMaxWidth(1000000);
            columnModel.getColumn(3).setMinWidth(40);
            columnModel.getColumn(3).setMaxWidth(40);
            
            table.setRowHeight(table.getRowHeight() + 10);
        }
        return table;
    }

解决方案 »

  1.   

    Swing 中的JTable的TableCell分别由一个绘制器和一个编辑器来控制显示和输入,对于一般的数据值,如int , String 等类型默认都为文本显示,通常Swing会默认使用JLabel作为绘制器,JTextField(无边框)作为编辑器。而对于TableModel 中数据类型为 Boolean 的单元格,则会用JCheckBox作为默认的绘制器和编辑器。这就是public Class getColumnClass(int columnIndex) {
                        if (columnIndex == 0) {
                            return Boolean.class;
                        }的用意。返回该列类型为 Boolean类,就告诉Swing应用JCheckBox为默认设置。当然也可以自己代码指定自选的控件类作为绘制器或者编辑器。如下:渲染器是你从外观上看到单元格的样子,而当你点击该单元格,进入编辑状态,那么该单元格将被编辑器所接管。以你需要的JCheckBox为例,就是将某列单元格的渲染器和编辑器都指定为一个JCheckBox实例,如果只指定渲染器为JCheckBox,编辑器为默认,那么看上去是JCheckBox显示,但当输入焦点进入单元格时,确实文本编辑;反之,如果设定编辑器为JCheckBox,渲染器为默认,那么你会看到该单元格显示的是true 或者 false,而点击进去,确实出现JCheckBox进行选择。下面具体列出一段代码:TableColumn column = table1.getColumnModel().getColumn(1);
    //设置编辑器
    column.setCellEditor(new DefaultCellEditor(new JCheckBox();));
    //设置渲染器
    column.setCellRenderer(new CheckBoxRenderer());CheckBoxRenderer 是一个自己编写的实现TableCellRenderer接口的类public class CheckBoxRenderer implements TableCellRenderer{public JCheckBox chk;public CheckBoxRenderer(){this.chk = new JCheckBox();}         //其中主要要实现这个函数
    public Component getTableCellRendererComponent(JTable arg0, Object value, boolean isSelected, boolean arg3, int arg4, int arg5) {this.chk.setSelected(Boolean.TRUE == value);
    this.chk.setEnabled(isSelected);
    this.chk.setHorizontalAlignment(JCheckBox.CENTER);
    return this.chk;}}我只是简单举了个例子,详细的技术细节请参阅JDK和其他权威资料