Java Swing: пересчитать значения в JTable, использовать TableModel или написать собственный редактор? - PullRequest
1 голос
/ 17 февраля 2010

Я использую JTable для отображения данных, полученных из потокового потока данных.

Каждая точка данных представлена ​​как объект типа X, который имеет одно поле интереса, назовем его valueField. Моя реализация интерфейса TableModel имеет HashMap объектов X, связанных с X.getId ().

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

Однако это значение также зависит от значений X.valueField в других строках.

Например, моя таблица представляет 3 объекта X1, X2 и X3. Их отношение:

X1.valueField = X2.valueField + X3.valueField

Если пользователь меняет X1, один из X2 и X3 остается постоянным (в зависимости от бизнес-логики), а другое значение изменяется, чтобы поддерживать согласованность отношений. Аналогичным образом, пользователь также может изменить X2 или X3.

Должен ли я инкапсулировать отношения в моей реализации TableModel или я должен расширить свой редактор пользовательских таблиц, чтобы учесть способы, которыми значение может измениться?

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

Любые мысли высоко ценятся.

00rush

1 Ответ

2 голосов
/ 17 февраля 2010

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

...