1

我有一个附加了 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 时才会发生。

4

1 回答 1

1

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

但是,在我的更新调用中,我一直在使用 tree.setModel(...) ,而实际上底层模型本身会处理这些更改。我将代码切换为仅调用 setModel() 一次,现在一切正常。

于 2012-08-10T16:34:44.107 回答