java 表头添加复选框,表头带有CheckBox可以实现全选的jtable

表的第一列都是checkbox,表头的checkbox可以实现全选和全不选的功能

c9aea38aadb4ad8922a04e9349d73cb4.png

bcc2b76d8edb0bc1a2609b1594179f10.png 

一开始要设置一下tablemodel ,这样boolean会被自动显示成一个checkbox,icon也会被自动显示:

table .setModel(new DefaultTableModel(){

@Override

public Class getColumnClass(int c){

Object value = getValueAt(0, c);

if(value!=null)

return value.getClass();

else return super.getClass();

}

});

然后,先写一个表头的renderer(renderer 里有一个方法返回component,table会把这个component的“样子”画在表格中,只是画出它的样子,这个component是不能用的):

class MyCheckBoxRenderer extends JCheckBox implements TableCellRenderer{

public MyCheckBoxRenderer () {

this.setBorderPainted(true);

}

@Override

public Component getTableCellRendererComponent(JTable table, Object value,

boolean isSelected, boolean hasFocus, int row, int column) {

// TODO Auto-generated method stub

return this;

}

}

然后把它设成表头第一列的renderer(第一列名字叫“select"):

final MyCheckBoxRenderer check = new MyCheckBoxRenderer();

table.getColumn("select").setHeaderRenderer(check);

由于表头和表中的Cell不一样,表头是不可编辑的,所以给他添加一个mouselistener才能响应事件:

table.getTableHeader().addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e){

if(table.getColumnModel().getColumnIndexAtX(e.getX())==0){//如果点击的是第0列,即checkbox这一列

JCheckBox Checkbox = (JCheckBox)check;

boolean b = !check.isSelected();

check.setSelected(b);

table.getTableHeader().repaint();

for(int i=0;i

table.getModel().setValueAt(b, i, 0);//把这一列都设成和表头一样

}

}

}

});

第一列的数据类型是boolean就会被自动显示成一个checkbox

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值