首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java : JTree DefaultMutableTreeNode未更新

Java : JTree DefaultMutableTreeNode未更新
EN

Stack Overflow用户
提问于 2015-06-24 09:15:50
回答 1查看 907关注 0票数 1

我最近一直在做一个Java项目,今天我在修改DefaultMutableTreeNode的子程序时陷入了困境。

以下SSCCE说明了这个问题:

代码语言:javascript
复制
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),程序按照预期的方式运行。当我再次双击根节点时,我想它会有四个子节点。但是没有。当你第二次双击时,仍然只有三个,而不是四个子节点。

我搞错了吗?谢谢你提前帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-24 09:22:09

您应该使用reload()方法通知模型有关更改的情况。

expand path之前添加如下行

代码语言:javascript
复制
 DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
 model.reload(root); // notify changes to model 
 tree.expandPath(tree.getSelectionPath());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31022516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档