【发布时间】: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?