编辑单元格时切换值

时间:2010-07-22 01:30:39

标签: java swing jtable editing

我有一个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();
    }
}

2 个答案:

答案 0 :(得分:1)

default renderer and editor for BooleanJCheckBox。考虑使用

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)

您需要查看TableCellRendererTableCellEditor

TableCellRenderer负责在未编辑单元数据时对其进行渲染,其中TableCellEditor负责提供用于编辑单元格值的组件。因此,您可以通过两种不同的方式表示数据,具体取决于它是正在编辑还是仅按正常方式呈现。

但是,您应该考虑如果从getValueAt()方法返回布尔类型,您的JTable应该自动呈现JCheckBox,当单元格处于编辑模式时,可以像往常一样点击JCheckBox值来更改它。要做到这一点,只需返回:

case ACTIVATED_INDEX:
    return Boolean.valueOf(user.getActivated());