Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更新整个JTree_Java_Swing_Jtree - Fatal编程技术网

Java 如何更新整个JTree

Java 如何更新整个JTree,java,swing,jtree,Java,Swing,Jtree,我有一个名为buildTree()的函数,它可以构建我的Google Drive文件夹的文件夹和文件的整个树 由于我拥有的每个“GoogleDrive条目”都有一个“Modified Timestamp”字段,因此我希望构建一个动态树,以便使用基于这些时间戳的JSlider查看该树随时间的变化 为此,我有另一个名为buildTimedTree(timestamp)的函数,该函数应该基于作为参数传递的时间戳创建一个新树,并且只返回该时间戳之前的树 这两个函数中的每一个都返回一个DefaultMut

我有一个名为
buildTree()
的函数,它可以构建我的Google Drive文件夹的文件夹和文件的整个树

由于我拥有的每个“GoogleDrive条目”都有一个“Modified Timestamp”字段,因此我希望构建一个动态树,以便使用基于这些时间戳的JSlider查看该树随时间的变化

为此,我有另一个名为
buildTimedTree(timestamp)
的函数,该函数应该基于作为参数传递的时间戳创建一个新树,并且只返回该时间戳之前的树

这两个函数中的每一个都返回一个
DefaultMutableTreeNode
,该节点被设置为
根节点

我使用的代码如下

JTree tree = new JTree(drive.buildTree());
tree.setBounds(148, 30, 463, 566);
scroll = new JScrollPane(tree);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setBounds(148, 30, 463, 566);
frame.getContentPane().add(scroll);

//the slider has been created before
slider.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent e) {
        JSlider source = (JSlider) e.getSource();
        Long timestamp = _table1.get(source.getValue());
        DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
        model.reload(buildTimedTree(timestamp));
    }
});
问题是,当我运行程序并移动滑块时,UI没有更新


有什么意见吗?

不是Swing专家,我在想
tree.repaint()。首先使用硬编码数据使逻辑正常工作,以确保您了解如何使用重新加载(…)方法。最后一步是用简单数据加载树。然后在框架中添加一个按钮,该按钮将使用不同的硬编码数据重新加载树。如果效果很好,那么您就知道如何使用reload()方法。如果没有,那么你有一个适当的论坛张贴。然后,一旦你使用硬编码数据,如果你使用动态数据,你就会得到它。不是Swing专家,我想
tree.repaint()。首先使用硬编码数据使逻辑正常工作,以确保您了解如何使用重新加载(…)方法。最后一步是用简单数据加载树。然后在框架中添加一个按钮,该按钮将使用不同的硬编码数据重新加载树。如果效果很好,那么您就知道如何使用reload()方法。如果没有,那么你有一个适当的论坛张贴。然后,一旦你使用硬编码数据,你就可以使用动态数据。