Компонент редактора JTree скрывает JTree - PullRequest
0 голосов
/ 03 июля 2019

Я создал настроенное JTree, которое отображает некоторые узлы как JTable, но при попытке отредактировать / выбрать таблицу (щелчок левой кнопкой мыши по узлу) таблица изменяет размеры и скрывает JTree за ним.Я нахожу это любопытным, потому что ESC закрывает редактор (JTable) и снова показывает дерево.Я чувствую, что это особенность ??Но я хочу иметь возможность взаимодействовать с таблицами так, как они отображаются с видимым деревом.

Пока что я переопределил:

  • AbstractLayoutCache.NodeDimensions.getNodeDimensions (....): вычислить измерение, в котором я хочу нарисовать узел дерева.
  • TreeCellRenderer.getTreeCellRendererComponent (...): создает различные компоненты, которые будут отображаться (и редактироваться) с правильным предпочтительным размером.
  • Редактор ячеек, который расширяет AbstractCellEditor и реализует TreeCellEditor: он вызывает средство визуализации, чтобы получить компонент редактирования (точно такой же компонент).
  • ComponentAdapter, чтобы связать все вместе.
  • ComponentAdapter.getNodeDimensions для вычисления области рисования узла.

Я заметил, что:

  • VariableHeightLayoutCache, похоже, не влияет на размеры показанных элементов (проверено черезотладка), как и планировалось.
  • JTree.paint не вызывается при отрисовке компонента редактора.

В идеале, компонент редактора должен быть нарисован поверх (или заменен) компонента визуализации, чтобы сделать взаимодействия интуитивно понятными.

1 Ответ

0 голосов
/ 04 июля 2019

Спасибо, Джордж З., мне не удалось воспроизвести проблему на минималистическом примере. И это привело меня к решению. Проблема заключалась в менеджере компоновки: если вы устанавливаете диспетчер компоновки для JTree, он применяется только при редактировании компонентов, следовательно, компоновка изменяется при нажатии на компонент.

Решение: убедитесь, что менеджер компоновки JTree имеет значение null.

...