2010-08-25 4 views
2

Опубликовано CellEditor.Не сохраняет значение ячейки

import java.awt.Component; 
import javax.swing.AbstractCellEditor; 
import javax.swing.JComponent; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.table.TableCellEditor; 

public class UserCellEditor extends AbstractCellEditor 
          implements TableCellEditor { 

    JComponent component = new JTextField(); 

    public Object getCellEditorValue() { 
     return ((JTextField) component).getText(); 
    } 

    public Component getTableCellEditorComponent(JTable table, 
      Object value, boolean isSelected, int row, int column) { 
     ((JTextField) component).setText((String) value); 
     return component; 
    } 
} 

Тогда я вызываю метод таблицы таким образом:

UserTable.getColumnModel().getColumn(0).setCellEditor(new UserCellEditor()); 

Клетка редактируется, но результат, нажав на Enter клавишу или перейти в другую ячейку не хранится, он возвращает оригинал стоимость.

Где я ошибаюсь или что я делаю неправильно?

+0

Выглядит хорошо, похоже на код, например, в exampledepot.com, возможно, есть ошибка в коде таблицы? – PhiLho

+0

Переформатированный код; пожалуйста, верните, если это неверно. – trashgod

+0

В моей таблице моделей не был переопределен метод setValueAt :( – Andrey

ответ

2

Похоже, вы редактируете значение в локальном JTextField, в то время как ваша модель данных впоследствии возвращает неизмененное значение, когда редактирование завершено. Вашему редактору необходимо обновить вашу модель, как предложено в этом example.

0

Если вы устанавливаете CustomTableCellEditor для столбца, этот столбец должен быть обновлен в setValueAt(Object o, int row, int column) соответствующей TableModel, если вы не делаете этого, новое значение никогда не обновляется. Кстати, если вы определяете свой CustomTableCellEditor таким образом:

public class CustomTableCellEditor extends AbstractCellEditor implements TableCellEditor

Вам не нужно будет стрелять события самостоятельно.