【发布时间】:2016-06-23 03:31:33
【问题描述】:
我正在使用JTree 测试一些代码,我注意到model.reload() 提供的输出与model.nodeChanged(currentNode) 不同。正确的输出来自model.reload()。这是相同代码的两个输出:
我的代码如下:
public class test {
private JFrame frame;
JTree tree;
DefaultMutableTreeNode root;
DefaultTreeModel model;
private Map<String, DefaultMutableTreeNode> treeMap;
public static void main(String[] args) {
test t = new test();
try {
Thread.sleep(1000 * 5);
} catch (Exception e) {
}
t.add_new_folder("Data", "trial 0");
t.add_new_folder("Data/trial 0", "trial 1");
t.add_new_folder("Data/trial 0/trial 1", "trial 2");
t.add_new_folder("Data", "trial 1");
try {
Thread.sleep(1000 * 5);
} catch (Exception e) {
}
t.add_new_folder("Data/trial 1", "trial 2");
t.add_new_folder("Data", "trial 2");
}
public test() {
frame = new JFrame("using reload");
tree = new JTree();
root = new DefaultMutableTreeNode("Data");
model = new DefaultTreeModel(root);
tree.setModel(model);
frame.getContentPane().add(tree, BorderLayout.WEST);
frame.setVisible(true);
frame.setSize(500, 500);
treeMap = new HashMap<>();
treeMap.put("Data", root);
}
public void add_new_folder(String path, String name) {
DefaultMutableTreeNode currentNode = treeMap.get(path);
DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(name);
currentNode.add(childNode);
treeMap.put(path + "/" + name, childNode);
model.reload();
//model.nodeChanged(currentNode);
}
}
我还需要使用model.nodeChanged(),因为它使扩展路径与model.reload 不同。任何解释以及如何解决?
【问题讨论】:
-
使用逻辑一致的缩进代码行和块的形式。缩进是为了让代码流更容易理解! IDE 通常有一个shortcut for formatting code..
-
我做了自动格式化,但没有帮助
-
好吧,祝你好运。生命太短暂,无法处理未格式化的代码。
-
!我不明白你的意思!
-
您未格式化的代码很难阅读,但显然是错误的:不要在Initial Thread上休眠; 做见Concurrency in Swing和How to Use Swing Timers。