swing初步学习,第三天

JCheckBox in JTable


public class MyTableModel  extends AbstractTableModel {

     Object[][] data;
     Object[] columnNames;

    MyTableModel(Object[][] data, Object[] columnNames) {
        this.data = data;
        this.columnNames = columnNames;
    }

    public int getColumnCount() {
        return columnNames.length;
    }

    public int getRowCount() {
        return data.length;
    }

    public Object getValueAt(int row, int col) {
        System.out.println("第"+row+"行"+col+"列:"+data[row][col]);
        return data[row][col];
    }

    // 该方法不一定要加入AbstractTableModel类,该方法设置列表的标题

    public String getColumnName(int col) {
        return columnNames[col] + "";
    }

    // 通过getClass()方法设置默认的控件,如true与false的默认控件是复选框,

    // 该方法不一定要加入AbstractTableModel类

    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();

    }

    // 定义可以编辑的单元,true表示可编辑,false表示不可编辑

    public boolean isCellEditable(int row, int col) {

        return true;

    }

    // 将改变后的值保存在表格中

    public void setValueAt(Object value, int row, int col) {

        data[row][col] = value;
        fireTableCellUpdated(row, col);
    }

}


应用上面的类:

    public JScrollPane initTableHeadend(Object[][] data, Object[] columnNames) {
        /**row:二维数组;columns:一维数组****/

        TableModel model = new MyTableModel(data , columnNames);

        //System.out.println(model.getColumnName(2));
        JTable table = new JTable( model);
        //table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

        table.setRowHeight(20); // 设置表格的行高度

        // 使选择框成为一个单元格
        table.setColumnSelectionAllowed(true);
        TableColumnModel TCM=table.getColumnModel();
        TCM.getColumn(1).setCellEditor(new DefaultCellEditor(this.tableHeadEndTypeJC)) ;
        TCM.getColumn(6).setCellEditor(new DefaultCellEditor(this.varTypeJC)) ;
        TCM.getColumn(9).setCellEditor(new DefaultCellEditor(this.positionJC)) ;
        TCM.getColumn(10).setCellEditor(new DefaultCellEditor(this.fontSizeJC)) ;
        TCM.getColumn(11).setCellEditor(new DefaultCellEditor(this.fontJC)) ;
        
        TCM.getColumn(2).setCellEditor(new DefaultCellEditor(new JCheckBox()));
        TCM.getColumn(12).setCellEditor(new DefaultCellEditor(new JCheckBox()));
        TCM.getColumn(13).setCellEditor(new DefaultCellEditor(new JCheckBox()));
        JScrollPane pane = new JScrollPane(table);
        return pane;

    }



期间碰到的异常:AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 11

    // 该方法不一定要加入AbstractTableModel类

  在下面抛出来的

    public Object getValueAt(int row, int col) {
        System.out.println("第"+row+"行"+col+"列:"+data[row][col]);
        return data[row][col];
    }

原因:是数组的列长度参差不起导致,如:

 Object rows2[][] =
        {   {  "中国", 44,false,"滑雪","滑雪","滑雪","滑雪","滑雪","","","",new Boolean(true),false},

        };
         String columns2[] = { "类别","排列","是否打印", "标题或栏目名称", "变量名", "变量类型", "宽度", "行高", "对齐", "字体", "字号","加粗","加下划线" };

如果rows[0].length或rows[1].length不等于columns2.length,就会抛出该异常

修改:补齐漏掉的列。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值