JTable 单元格嵌入checkbox

       首先,DefaultTableModel还是要重写的,不过可以不用重写整个类,只要写一个继承DefaultTableModel的类,里面添加你要的响应函数就行了。代码如下
      class AddCheckboxTableModel extends DefaultTableModel{ 
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        public MyTableModel(Object[][] data,String[] columns)
        { super(data,columns); } 
        public boolean isCellEditable(int row,int column){ //设置Table单元格是否可编辑
            if(column==0)return true;        
            return false; 
        } 
        public Class<?> getColumnClass(int columnIndex) 
        { 
            if(columnIndex==0)
            { return Boolean.class; 
            } 
            return Object.class; 
        } 
    }

   然后,在构建Jtable的时候就用这个datamodel,构建方法示例:
          String[] columnNames = {"Check","ID","Name","Sex","Status","Entry-Date"};                
        Object[][] tableData = new Object[employeeList.size()][6];
        for(int i =0; i<employeeList.size();i++)
        {
            tableData[i][0]=new Boolean(false);//用boolean就可以把第一列显示为checkBox,这是JTable特有的功能
            tableData[i][1]=employeeList.get(i).getEmployeeID();
            tableData[i][2]=employeeList.get(i).getName();
            tableData[i][3]=employeeList.get(i).getSex();
            tableData[i][4]=employeeList.get(i).getStatus();
            tableData[i][5]=employeeList.get(i).getEntryDay();            
        }
        AddCheckboxTableModel tableModel = new  AddCheckboxTableModel (tableData, columnNames);
        table.setModel(tableModel);
        table.setPreferredScrollableViewportSize(new Dimension(500, 300));
        table.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
        table.setBounds(30,30,500,300);
        table.setRowHeight (25);

        这样就可以构建一个Table,除了第一列,其他列都是不可编辑的。
        如果想要为可以勾选的同时响应行点击事件,可以这样做:
        table.addMouseListener(adapter);
        table.repaint();
        table.updateUI();

        private MouseAdapter adapter = new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
             int row=table.getSelectedRow();  
            if(table.getSelectedColumn()==0)//如果是第一列的单元格,则返回,不响应点击
                return;
        }

转载于:https://my.oschina.net/u/869416/blog/121746

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值