【问题标题】:JTree adding nodes and updatingJTree 添加节点和更新
【发布时间】:2014-01-15 23:04:26
【问题描述】:

所以我有一个非常有趣的问题: 问题的目标是有一个JTree、一个文本字段和一个添加按钮;当单击一个节点并且文本字段中有文本时,在按下添加按钮时,一个节点被创建为单击节点的子节点。

我像往常一样实例化一棵树:

    tree = new JTree(treeModel);
    tree.setEditable( true );
    tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
    tree.setShowsRootHandles( true );

然后我设置监听器:

tree.addMouseListener( new MouseAdapter()
    {
        @Override
        public void mouseClicked( MouseEvent e )
        {
            doMouseClicked( e );
        }
    } );

    jButton.addActionListener( new ActionListener()
    {
        @Override
        public void actionPerformed( ActionEvent e )
        {
            if(nodeIsClicked && (!jTextField.getText().isEmpty()))
            {
                DefaultMutableTreeNode y = new DefaultMutableTreeNode( jTextField.getText() );
                m.add( y );
            }
        }
    } );
}

void doMouseClicked(MouseEvent me) {
    tp = tree.getPathForLocation(me.getX(), me.getY());
    if (tp != null )
    {
        m = (DefaultMutableTreeNode) tp.getLastPathComponent();
        nodeIsClicked = true;
    }
    else
    {
        nodeIsClicked = false;
    }
}

奇怪的是,除了我不能完全按照我想要的方式设置更新(基本上将树扩展到刚刚创建的节点)之外,比如说,我添加了 2 个节点到根,然后是我刚刚创建的两个节点之一的另一个节点,当我再次单击根并尝试添加一个新节点时 - 什么都没有。它一直到m.add() 方法,但它只是不添加新节点。

关于我如何解决这个问题的任何想法?想到了什么解决方案?

【问题讨论】:

  • 如需尽快获得更好的帮助,请发布MCVE。顺便说一句,为什么这段代码使用MouseListener 而不是TreeSelectionListener

标签: java swing jtree


【解决方案1】:

m.add( y ); 之后你可以使用:

((DefaultTreeModel) tree.getModel()).nodesWereInserted(m,new int[]{m.getChildCount()-1});

根据文档:

在将一些 TreeNode 插入节点后调用此方法。 childIndices 应该是新元素的索引,并且必须按升序排序。

这样可以触发所需的事件并为您提供帮助。

也使用TreeSelectionListener 而不是@AndrewThompson 提到的MouseListener

【讨论】:

  • 是的,我对如何实现它感到困惑!非常感谢!我还使用了 TreeSelectionListener,它运行良好,除了树扩展部分,哈哈。谢谢!
猜你喜欢
  • 2012-09-01
  • 2011-12-17
  • 1970-01-01
  • 2012-10-04
  • 2011-10-13
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多