[英]Java Swing: JTree DefaultMutableTreeNode not updating
我最近一直在從事Java Swing項目的工作,今天我在修改DefaultMutableTreeNode
子級時陷入困境。
以下SSCCE說明了該問題:
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
public class Test
{
private static boolean executed = false;
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//
final DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
final JTree tree = new JTree(root);
tree.addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent ev)
{
if (ev.getClickCount() == 2)
{
root.removeAllChildren();
for (String s: get())
{
root.add(new DefaultMutableTreeNode(s));
System.out.println(s + " added");
}
System.out.println();
tree.expandPath(tree.getSelectionPath());
}
}
});
frame.add(tree);
frame.setSize(200,200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
static String[] get()
{
if (!executed)
{
executed = true;
return new String[]{"a","b","c"};
}
else return new String[]{"a","b","c","d"};
}
}
如您所見,第一次調用get()
方法時,它將返回一個3元素的數組,此后返回一個4元素的數組。 當我第一次雙擊(實際按下)根節點時,應該有三個子節點(a,b和c),並且程序的行為符合預期。 當我再次雙擊根節點時,我想它將有四個子節點。 但是事實並非如此。 當您第二次雙擊時,仍然只有三個而不是四個子節點。
我做錯了嗎? 預先感謝您的幫助。
您應該使用reload()
方法通知模型有關更改的信息
像波紋管一樣在expand path
之前添加此行
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.reload(root); // notify changes to model
tree.expandPath(tree.getSelectionPath());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.