Я создал настроенное JTree, которое отображает некоторые узлы как JTable, но при попытке отредактировать / выбрать таблицу (щелчок левой кнопкой мыши по узлу) таблица изменяет размеры и скрывает JTree за ним.Я нахожу это любопытным, потому что ESC закрывает редактор (JTable) и снова показывает дерево.Я чувствую, что это особенность ??Но я хочу иметь возможность взаимодействовать с таблицами так, как они отображаются с видимым деревом.
Пока что я переопределил:
- AbstractLayoutCache.NodeDimensions.getNodeDimensions (....): вычислить измерение, в котором я хочу нарисовать узел дерева.
- TreeCellRenderer.getTreeCellRendererComponent (...): создает различные компоненты, которые будут отображаться (и редактироваться) с правильным предпочтительным размером.
- Редактор ячеек, который расширяет AbstractCellEditor и реализует TreeCellEditor: он вызывает средство визуализации, чтобы получить компонент редактирования (точно такой же компонент).
- ComponentAdapter, чтобы связать все вместе.
- ComponentAdapter.getNodeDimensions для вычисления области рисования узла.
Я заметил, что:
- VariableHeightLayoutCache, похоже, не влияет на размеры показанных элементов (проверено черезотладка), как и планировалось.
- JTree.paint не вызывается при отрисовке компонента редактора.
В идеале, компонент редактора должен быть нарисован поверх (или заменен) компонента визуализации, чтобы сделать взаимодействия интуитивно понятными.