本文共 1369 字,大约阅读时间需要 4 分钟。
表的第一列都是checkbox,表头的checkbox可以实现全选和全不选的功能
一开始要设置一下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
转载地址:http://uodqv.baihongyu.com/