为什么需要两次点击才能突出显示我的JTree?

时间:2012-08-10 16:06:50

标签: java swing jtree

我有一个附加了SelectionListener的JTree。只要我点击树中的节点,监听器就能正常运行并正确地通知我。

然而,节点不会在选中时突出显示。事实上,它需要两次点击才能获得视觉效果"蓝盒"在要显示的节点上。

为什么以下代码需要两次点击才能显示选择?

创建JTree

JTree tree = new JTree();
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setDragEnabled(true);
tree.setDropMode(DropMode.ON);
tree.expandRow(0);
tree.setModel(model.getActiveFilterModel());

添加监听器

tree.addTreeSelectionListener(new TreeSelectionListener() {
    @Override
        public void valueChanged(TreeSelectionEvent event) {
            JTree tree = (JTree) event.getSource();
            DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
            if (selectedNode != null) {
                model.setSelectedFilter((Filter) selectedNode.getUserObject());
            }
        }
});

编辑:

我想补充说,只有在我第二次在树上调用.setModel时才会出现这种情况。

1 个答案:

答案 0 :(得分:1)

问题是我正在使用Observer模式并不断调用显示(例如,JTree,更新())。这本身不是问题。

但是,在我的更新调用中,当底层模型真正处理这些更改时,我一直在使用tree.setModel(...)。我将我的代码切换到只调用setModel()一次,现在一切都运行良好。