所以我有這個非常有趣的問題: 問題的目標是有一個JTree
,一個文本字段和一個添加按鈕;當單擊節點並且文本字段中有文本時,按下添加按鈕時,將創建一個節點作爲單擊節點的子節點。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](http://stackoverflow.com/help/mcve)。另外,爲什麼此代碼使用'MouseListener'而不是['TreeSelectionListener'](http://docs.oracle.com/javase/7/docs/api/javax/swing/event/TreeSelectionListener.html )? –