本文前提: 了解基本的JLabel的model知识和用法
- 添加复选框, 即如何设置model实现复选框, 可以参考以下两种model实现方式
内部类的方式:
table1.setModel(new DefaultTableModel(
new Object[][] {
{null, null, null, null, false},
{null, null, null, null, true},
{null, null, null, null, true},
{null, null, null, null, true},
{null, null, null, null, null},
{null, null, null, null, null},
},
new String[] {
null, null, null, null, null
}
) {
Class<?>[] columnTypes = new Class<?>[] {
Object.class, Object.class, Object.class, Object.class, Boolean.class
};
boolean[] columnEditable = new boolean[] {
false, true, true, true, true
};
@Override
public Class<?> getColumnClass(int columnIndex) {
return columnTypes[columnIndex];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return columnEditable[columnIndex];
}
});
外部类的方式:
public class MyTableModel extends DefaultTableModel {
public MyTableModel() {
super(new String[]{"ID", "Name", "Present"}, 0);
}
@Override
public Class<?> getColumnClass(int columnIndex) {
Class clazz = String.class;
switch (columnIndex) {
case 0:
clazz = Integer.class;
break;
case 2:
clazz = Boolean.class;
break;
}
return clazz;
}
@Override
public boolean isCellEditable(int row, int column) {
return column == 2;
}
@Override
public void setValueAt(Object aValue, int row, int column) {
if (aValue instanceof Boolean && column == 2) {
System.out.println(aValue);
Vector rowData = (Vector)getDataVector().get(row);
rowData.set(2, (boolean)aValue);
fireTableCellUpdated(row, column);
}
}
}
}
效果如下: