2015-01-02 4 views
0

У меня есть JTable, чьи ячейки редактор является JTextField, я ссылаться focuslost на celleditor , код которогоДинамически изменить значение JTable ячейки в центре внимания потерял

public void focusLost(FocusEvent e) 
{ 
JTextField textField = new JTextField(); 
textField = (JTextField) e.getSource(); 
textField.setText(getCurrencyEquivalent(textField.getText()));//read P.S 
table.setValueAt(textField.getText(), table.getEditingRow(), 0); 
} 

Я получаю следующее исключение:

java.lang.ArrayIndexOutOfBoundsException: -1 

Когда я отлаживал, было ясно, что focuslost запускается на cellEditor после того, как фокус фактически потерян из ячейки JTable. Что делает table.getEditingRow() всегда возвращать -1, поэтому невозможно динамически устанавливать значения в focuslost. Помогите мне решить это с помощью любой другой техники, если она доступна.

P.S: getCurrencyEquivalent() - метод, который возвращает форматированную версию данной строки в другом формате String.

+1

Почему вы пытаетесь это сделать? 'JTable' API /' CellEditor' должен заботиться об этом для вас, вы должны либо вызывать 'stopCellEditing', либо' cancelCellEditing' – MadProgrammer

ответ

2

getCurrencyEquivalent() - это метод, который возвращает форматированную версию данной строки в другом формате String.

Не используйте FocusListener, чтобы попытаться изменить формат данных при его редактировании.

Вместо этого вы должны использовать собственный инструмент визуализации для форматирования данных. Проверьте Table Format Renderers за простой пример того, как вы можете это сделать.

+0

Спасибо, создав собственный обработчик ячеек, он решил – Cybermonk