0

您好,我使用以下代码。每次actionPerformed调用所选节点都会获得一个新的子节点。然而JTree,每个节点只显示一个子节点,尽管它有更多。这是为什么?

private class SomeActionListener implements ActionListener{

    private DefaultMutableTreeNode _root = new DefaultMutableTreeNode("ROOT");
    private JTree _tree;

    new SomeActionListener(){
        this._tree = new JTree(this._root);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)_tree.getSelectionPath().getLastPathComponent();
        DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(e.getWhen());
        selectedNode.add(newNode);
    }
}
4

3 回答 3

3

因为您不会触发任何事件来通知树模型已更改。

获取树模型并调用insertNodeInto(),不仅会插入节点,还会从树模型向 JTree 发送一个事件,通知它已经插入了一个节点,并且必须相应地更新视图.

于 2013-07-14T21:40:36.420 回答
1

添加新节点后,您必须重新加载树模型:

((DefaultTreeModel)(_tree.getModel())).reload();
于 2013-07-14T21:46:22.280 回答
0

在添加、更新或删除节点后立即尝试以下操作:

this._tree.revalidate();
this._tree.repaint();
于 2013-07-14T21:51:17.653 回答