2009-07-14 3 views
0

У меня есть модель таблицы, которая заполнена источником данных (внешний), который обновляет каждые xx секунд. Данные отображаются в JTable.Редактирование JTable Editor с данными Live

Пользователь может переопределить данные в ячейке таблицы посредством клеточного посредника, который расширяет AbstractCellEditor. Если пользователь нажимает, код проверяет, соответствует ли новое значение значению в модели таблицы. Если это не так, предполагается, что это переопределение.

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

Какова стандартная логика и реализация для этого?

ответ

0

Как определить, изменился ли пользователь или нет?

Я создал класс, который я называю TableCellListener, который прослушивает изменения, внесенные с помощью редактора ячеек. Он берет копию значения до того, как ячейка начинает редактирование и сравнивает ее со значением ячейки после ее прекращения редактирования. Похоже, это может быть то, что вы хотите.

Другим решением может быть проверка того, что таблица в настоящее время редактирует ячейку, прежде чем обновлять TableModel в фоновом режиме. Возможно, вы всплываете в диалоговом окне, давая пользователю возможность принять обновление или отменить его.

0

Ваша модель таблицы должна поддерживать состояние, указывающее, была ли переопределена ячейка таблицы по принципу «каждый за другим». Если вы этого не сделаете, вы также столкнетесь с проблемой, когда пользователь переопределит ячейку, и текущие данные поступают и меняются на то же значение, что и использование. Вы отмените это переопределение.

Вы можете заполнить это состояние в режиме override setValueAt(Object,int,int) в своем TableModel. Этот метод будет вызван JTable, когда ваш AbstractCellEditor закончит редактирование.

Смежные вопросы