JXTreeTable — управление флажками из внешнего приложения — возможно?

Используя код Java, я пытаюсь манипулировать другим внешним Java-приложением Swing, для которого у меня нет доступа к какой-либо информации о том, как оно было закодировано. В частности, я пытаюсь манипулировать JXTreeTable. Один из столбцов логического типа содержит флажки.

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

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

Кроме того, флажки в логическом столбце содержат метки. У меня такое ощущение, что эти метки генерируются TableRenderer, но как я могу получить значения на метках?

Примечание. Я выполняю весь код Java с помощью скрипта автоматического тестирования, который я пишу (точнее, в QTP). Итак, я ограничен во многих подходах, которые я могу использовать (например, я не могу кодировать свои собственные классы Java).


person Ding Dong    schedule 16.07.2012    source источник


Ответы (2)


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

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

person MadProgrammer    schedule 16.07.2012
comment
Спасибо, MadProgrammer за ваш ответ - он действительно помог мне прояснить разницу между TableModel и TableRenderer. Однако моя реальная ситуация оказалась гораздо более запутанной! Ой! Для будущих читателей: ниже я оставил информацию о том, что мне нужно было сделать, чтобы решить мою проблему. Наслаждаться! - person Ding Dong; 25.07.2012

Вот как я решил свою проблему:

Моя конкретная ситуация, однако, оказалась гораздо более сложной, как я теперь узнал. Выяснилось, что изменение модели напрямую не имело никакого эффекта — мне приходилось вносить все изменения в таблицу через фактические узлы в дереве. Путем слепого отслеживания я обнаружил, что разработчики закодировали пользовательские обработчики узлов с методами для изменения состояния флажка и данных в модели. Чтобы обновить отображение таблицы, я использовал treeTable.updateUI().

person Ding Dong    schedule 25.07.2012
comment
Table.updateUI действительно не должен использоваться для этого, он связан с API внешнего вида. Вы пробовали использовать invalidate(), repaint()? И/или TreeTableModel.fireTreeNodesChanged (источник java.lang.Object, путь java.lang.Object [], int [] childIndices, java.lang.Object [] дочерние элементы)? - person MadProgrammer; 25.07.2012
comment
подчеркивая точку зрения @MadProgrammer: использование updateUI НЕПРАВИЛЬНО! - person kleopatra; 25.07.2012