Jtree расширение и проблема выбора - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть два экземпляра JTrees (leftTree и rightTree).Пользователь может выбрать несколько узлов из левого дерева и добавить их в правое дерево.У меня есть приведенный ниже код в слушателе действия кнопки добавления, чтобы развернуть и выбрать узел в rightTree после добавления узла.

rightTree.updateUI();

TreePath[] paths = leftTree.getSelectionPaths();
if (null != paths && paths.length > 0)
{
    TreePath path = paths[0];
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
    rightTree.scrollPathToVisible(new TreePath(node.getPath()));
    rightTree.setSelectionPaths(paths);
}

leftTree.clearSelection();

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

Я пытался использовать другие методы в JTree, такие как setExpandsSelectedPaths (true), expandPath (new TreePath (node.getParent ())).Также попытался вызвать rightTree.repaint () или rightTree.validate () после выполнения вышеуказанного кода.Но проблема все еще существует.Но rightTree.isExpanded (new TreePath (node.getParent ())) возвращает значение true;

Мое дерево имеет глубину около 7-8 уровней.Пожалуйста, помогите мне решить эту проблему и дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

1 голос
/ 21 февраля 2011

Для меня подход неверен. TreePath - это последовательность узлов от текущего узла до самого верхнего родительского элемента. Другими словами, TreePath из узла создается путем вызова getParet () до достижения значения tull. Поэтому, если вы получаете узел из одного дерева и создаете путь, путь - это последовательность узлов в исходном дереве, а путь во втором дереве бесполезен, поскольку некоторые узлы в пути просто не существуют в модели целевого дерева.

Вам нужно получить выбранный узел и найти подходящий во втором дереве. Угадай узел с тем же объектом пользователя. Для найденного узла в целевом дереве (если мы его нашли) создайте TreePath и выберите / разверните.

...