当前位置: 首页 > 面试题库 >

设置新的TreeModel时如何自动扩展JTree?

长孙鸿振
2023-03-14
问题内容

我有一个风俗JTree和一个风俗JModel;当我给它一个新模型时,我希望JTree能够“自动扩展”。目前,它只是将所有节点折叠到根目录。

这是一个例子:

private class CustomTree extends JTree {

    @Override
    public boolean isExpanded(TreePath path) {
        return ((Person) path.getLastPathComponent).hasChildren();

}

private class CustomTreeModel extends TreeModel {

    // ... omitting various implementation details

    @Override
    public boolean isLeaf(Object object) {
        return !((Person) object).hasChildren();
    }

}

Model model = new Model();
Person bob = new Person();
Person alice = new Person();
bob.addChild(alice);
model.setRoot(bob);
JTree tree = new CustomTree(new CustomTreeModel(model));

此时,树将正确显示:

- BOB
  - ALICE

其中Alice是Bob的孩子(在数据和可视树中)

但是,如果我打电话:

tree.setModel(new CustomTreeModel(model));

一切都崩溃了:

+ BOB

设置新模型时,有没有一种方法可以“自动扩展”树中的所有内容?


问题答案:

我有一个类似的问题。

您的解决方案似乎仅对顶级树节点适用。

但是我需要扩展所有后代节点。所以我用下面的递归方法解决了它:

private void expandAllNodes(JTree tree, int startingIndex, int rowCount){
    for(int i=startingIndex;i<rowCount;++i){
        tree.expandRow(i);
    }

    if(tree.getRowCount()!=rowCount){
        expandAllNodes(tree, rowCount, tree.getRowCount());
    }
}

被调用

expandAllNodes(tree, 0, tree.getRowCount());

在哪里,treeJTree

除非有人有更好的解决方案。



 类似资料:
  • 你可以通过 nuxt.config.js 文件中的 extend 配置项来扩展 Webpack 的配置: module.exports = { build: { extend (config, { isDev, isClient }) { // ... } } }

  • This is a continuation of the basic installation, please read that first! 这是基本安装的继续,请先阅读那个文件! A slightly more flexible way to setup Smarty is to extend the class and initialize your Smarty environment

  • 问题内容: 实现类时,我的问题非常简单。(因为Eclipse和IDEA可以为我们生成)。 但是,当您扩展课程时,我不知道该怎么做。(当然,这项工作不是必须的,但是我想确定在代码中要做什么,因此此选项将很有帮助)。 谢谢 :) 问题答案: 对于Eclipse,进入Source菜单()-> Override / Implement Methods …,这将为您提供所有可以@overriden的方法的列

  • 问题内容: 我希望我的chrome扩展程序每次在扩展文件夹中保存文件时都可以重新加载,而不必在chrome:// extensions /中明确单击“重新加载”。这可能吗? 编辑:我知道我可以更新Chrome重新加载扩展的间隔,这是一个半途而废的解决方案,但是我宁愿让我的编辑器(emacs或textmate)触发保存重新加载或要求Chrome进行监视更改目录。 问题答案: 您可以使用 “ 扩展Re

  • 每个桌面浏览器都有一套开发工具,开箱即用,您可以将他们添加到您的浏览器的扩展或插件。 以下是两个具有一些实用功能的Chrome扩展程序,可帮助您调试设计。 Emmet Re:View Emmet Re:View是一个工具,它可以让你轻松查看您的网站在每个媒体查询(media queries)中的样子,并同步所有页面的滚动。 你可以在他们的网站上看到它的演示。 Download on the Chr

  • 该扩展能根据Scrapy服务器及您爬取的网站的负载自动限制爬取速度。 设计目标 更友好的对待网站,而不使用默认的下载延迟0。 自动调整scrapy来优化下载速度,使得用户不用调节下载延迟及并发请求数来找到优化的值。 用户只需指定允许的最大并发请求数,剩下的都交给扩展来完成。 扩展是如何实现的 在Scrapy中,下载延迟是通过计算建立TCP连接到接收到HTTP包头(header)之间的时间来测量的。