Переключение значений при редактировании ячейки

У меня есть JTable, который использует пользовательский TableModel для отображения серии экземпляров объектов. Внутри существует случай переключателя getValueAt(int row, int column) возвращать значения согласно данным атрибутам (см. ниже). Один оператор возврата включает возвращение значения 1/0 как истинное/ложное.

Существует ли способ, которым я могу изменить этот 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();
    }
}
1
задан James P. 22 July 2010 в 01:30
поделиться

2 ответа

Рендерер и редактор по умолчанию для 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
ответ дан 2 September 2019 в 22:51
поделиться

Вам нужно взглянуть на TableCellRenderer и TableCellEditor :

A TableCellRenderer отвечает за отображение данных ячеек когда он не редактируется, тогда как TableCellEditor отвечает за предоставление компонента, используемого для редактирования значения ячейки.Таким образом, вы можете представить данные двумя разными способами в зависимости от того, редактируются они или просто отображаются как обычно.

Однако вы должны учитывать, что если вы возвращаете логический тип из метода getValueAt (), ваш JTable должен автоматически отображать JCheckBox, когда ячейка находится в режиме редактирования, значение JCheckBox можно изменить, щелкнув по нему как обычно. Для этого просто вернитесь:

case ACTIVATED_INDEX:
    return Boolean.valueOf(user.getActivated());
1
ответ дан 2 September 2019 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: