Сбросить старое значение в ячейке JTable, если новое неверно - PullRequest
3 голосов
/ 22 ноября 2011

У меня есть JTable для ввода некоторых чисел в определенном диапазоне. Когда они превышают этот диапазон, возникает исключение, чтобы показать ошибку. Также когда вы вводите другие символы или даже ничего не вводите.

Когда все это произойдет, я хочу вернуть старое значение. Я думал сделать слушателя, который предупреждает меня, когда ячейка получает фокус (я имею в виду, когда ячейка открыта для ввода значений). Затем я сохраню это значение, и если что-то пойдет не так, у меня будет готовое значение для ввода снова.

Я искал некоторое время, но я еще не видел, как сделать этого слушателя. Как я мог это сделать (или по-другому)?

Ответы [ 3 ]

3 голосов
/ 22 ноября 2011

http://www.java2s.com/Code/JavaAPI/javax.swing.table/implementsTableCellEditor.htm

См. StopCellEditing () из Javadoc:

"Указывает редактору прекратить редактирование и принять любое частично отредактированное значение в качестве значения редактора. Редактор возвращает falseесли редактирование не было остановлено, это полезно для редакторов, которые проверяют и не могут принимать недействительные записи. "

3 голосов
/ 22 ноября 2011

Таблица модели (ваш подкласс AbstractTableModel), как ожидается, сделает проверку.

Когда JTable обновляется, он выполняет вызов

public void setValueAt(Object aValue, int rowIndex, int columnIndex)

Проверьте значение там, если оно не соответствует диапазону, просто не обновляйте его в своей реализации модели. После вызова setValueAt () таблица повторно считывает значение из модели (путем вызова getValueAt()), поэтому исходное содержимое возвращается в таблицу.

2 голосов
/ 22 ноября 2011

Вот гораздо лучшее решение: используйте модель данных. Ваша модель содержит значения.

Когда рендеринг таблицы, возьмите значения из вашей модели.

Когда пользователь редактирует ячейку, принимайте текущее значение. Когда редактирование завершится успешно, добавьте новое значение в вашу модель. Если редактирование не удалось, просто обновите ячейку: средство визуализации примет неизмененное значение из вашей модели, и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...