我有一个JTable,它使用自定义TableModel来显示一系列对象实例。 getValueAt(int row, int column)
内有一个switch case,可根据给定的属性返回值(见下文)。一个return语句涉及返回值1/0为true / false。
有没有办法可以修改这个TableModel,以便在编辑单元格时显示1/0?
public Object getValueAt(int row, int column) {
User user = (User)dataVector.get(row);
switch (column) {
case ID_INDEX:
return user.getId();
case USERNAME_INDEX:
return user.getUserName();
case PASSWORD_INDEX:
return "****";
case ACTIVATED_INDEX:
return (user.getActivated())?"true":"false";
default:
return new Object();
}
}
答案 0 :(得分:1)
default renderer and editor for Boolean
是JCheckBox
。考虑使用
case ACTIVATED_INDEX:
return Boolean.valueOf(user.getActivated());
可替换地,
case ACTIVATED_INDEX:
return (user.getActivated())?"1":"0";
附录:例如,DefaultTableModel
不会覆盖getColumnClass()
,而AbstractTableModel
只会返回Object.class
。您的TableModel
应相应地覆盖getColumnClass()
:
DefaultTableModel dtm = new DefaultTableModel() {
@Override
public Class<?> getColumnClass(int col) {
return getValueAt(0, col).getClass();
}
};
// add some data
JTable table = new JTable(dtm);
答案 1 :(得分:1)
您需要查看TableCellRenderer
和TableCellEditor
:
TableCellRenderer
负责在未编辑单元数据时对其进行渲染,其中TableCellEditor
负责提供用于编辑单元格值的组件。因此,您可以通过两种不同的方式表示数据,具体取决于它是正在编辑还是仅按正常方式呈现。
但是,您应该考虑如果从getValueAt()方法返回布尔类型,您的JTable应该自动呈现JCheckBox,当单元格处于编辑模式时,可以像往常一样点击JCheckBox值来更改它。要做到这一点,只需返回:
case ACTIVATED_INDEX:
return Boolean.valueOf(user.getActivated());