У меня есть мастер с несколькими экранами, где пользователь должен заполнить свои данные для дальнейшей обработки. На втором экране у меня есть радиогруппа с тремя радиокнопками, которые включают дополнительные элементы. Чтобы продолжить, пользователь должен выбрать один из них. Когда пользователь выбирает третью кнопку, активируется однократный выбор JTree
, заполненный данными, и пользователь должен выбрать один из вариантов. Затем пользователь должен нажать «Далее», чтобы перейти к следующему экрану. Выбранная им опция сохраняется как TreePath
. Пока все хорошо.
Моя проблема в следующем. Если пользователь хочет вернуться со следующего экрана на экран с JTree
, я хочу предоставить ему JTree
, расширенный до выбранного варианта и выделить его. Однако все, что я пытаюсь сделать для этого (любые комбинации expandPath
, scrollPathToVisible
, addSelectionPath
, makeVisible
), всегда дает мне свернутое дерево. Я пытаюсь расширить как листья, так и узлы. Мой код выглядит так:
rbProcessJTree.setSelected(isProcessJTree());
if (null != getSelectedTablePath()){
trTables.addSelectionPath(getSelectedTablePath());
trTables.expandPath(getSelectedTablePath());
trTables.scrollPathToVisible(getSelectedTablePath());
}
Когда вызывается setSelected()
, вызывается прослушиватель изменения состояния, который включает JTree
. Модель загружается при инициализации формы.
Каждый раз, когда я переключаюсь между экранами, я сохраняю входные данные с предыдущего экрана и удаляю их. Затем, когда мне нужно открыть предыдущий экран, я сохраняю данные со следующего экрана, удаляю их, загружаю данные на этот экран и показываю их. Так что каждый раз экран генерируется с нуля.
Не могли бы вы объяснить, какую последовательность операций необходимо выполнить, чтобы развернуть JTree
во вновь созданной форме с загруженной моделью данных и предоставленным путем выбора?