выделите treeNode в Jtree, используя сам treeNode - PullRequest
3 голосов
/ 17 января 2012

У меня есть JTree ( myTree ), а в другом классе у меня есть DefaultMutableTreeNode, который был взят из myTree .

В определенномЯ хочу, чтобы JTree выделил узел.

Я пытался:

myTree.setSelectionPath(new TreePath(treeNode));

, но визуально ничего не происходит.

есть идеи?

ОБНОВЛЕНИЕ:

У меня есть еще один JTable, который отображается на основе выбранного treeNode в myTree.Таблица обновляется правильно .Это просто myTree , который отказывался обновляться визуально.

Ответы [ 3 ]

4 голосов
/ 17 января 2012

Из API Java мы получаем описание TreePath ниже:

Представляет путь к узлу.TreePath - это массив объектов, которые поступают из TreeModel. Элементы массива упорядочены таким образом, что корень всегда является первым элементом (индекс 0) массива .

, поэтому из массива должен быть создан действительный TreePathвключая все узлы на пути от корневого узла и узла, который вы хотите выбрать.

4 голосов
/ 17 января 2012

Вам необходимо использовать фактический путь дерева узла.Не только экземпляр TreePath:

myTree.setSelectionPath(new TreePath(treeModel.getPathToRoot(treeNode)));

Кроме того, Javadoc говорит:

Если какой-либо компонент пути скрыт (в свернутом узле), и getExpandsSelectedPaths имеет значение trueоно открыто (доступно для просмотра)

Так что убедитесь, что getExpandsSelectedPaths истинно.

0 голосов
/ 28 октября 2013

Многие ошибки Swing, причуды и другие недостатки можно обойти, используя SwingUtilities.invokeLater (Runnable) :

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        // JB Nizet's solution:
        myTree.setSelectionPath(new TreePath(treeModel.getPathToRoot(treeNode)));
    }
});

Это также решает ту же проблему с JTree.setSelectionPaths (TreePath []) .

...