JTable редактор сохраняет старые значения
Хорошо, я заметил проблему с моим редактором в JTable
, Сценарий выглядит так:
- Я редактирую ячейку и ввожу правильное значение, допустим, я ввел
- Я дважды щелкаю по другой ячейке (которая может быть пустой или нет)
- Ячейка теперь содержит 42, я могу редактировать это значение, но, как только я дважды щелкну по ячейке 42, находится в ячейке.
Я подозреваю, что мой редактор, потому что, когда я использую DefaultCellEditor
нет проблем. Вот его декларация:
public class GlobalEditor extends DefaultCellEditor {
public GlobalEditor(JTable table, JTextField jtf) {
super(jtf);
/*
* Setting font, background/foreground color, center alignement
*/
}
public boolean stopCellEditing() {
String value = ((JTextField) getComponent()).getText();
if (!value.equals("")) {
if (value.length() > 10) {
((JComponent) getComponent()).setBorder(new LineBorder(Color.red));
return false;
}
}
return super.stopCellEditing();
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
JTextField ec = (JTextField) editorComponent;
if(value != null && value+"" != "---")
ec.setText(""+value);
if (isSelected) {
ec.selectAll();
}
return editorComponent;
}
}
Эта линия this.setDefaultEditor(Object.class, new GlobalEditor(this, new JTextField()));
устанавливает мой редактор в моем JTable
конструктор.
Что мне не хватает?
2 ответа
Решение
Хорошо, это сработало:
JTextField ec = (JTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column);
Вместо (и вернуть ec
вместо editorComponent
):
JTextField ec = (JTextField) editorComponent;
в getTableCellEditorComponent
метод.
Любое объяснение приветствуется!
Вы должны переопределить метод getCellEditorValue
public Object getCellEditorValue() {
return ((JTextField) getComponent()).getText();
}
Также нет необходимости инициализировать GlobalEditor с JTable