【问题标题】:Merging my own Directory Tree class with JTree for use on Swing将我自己的目录树类与 JTree 合并以在 Swing 上使用
【发布时间】:2017-03-30 14:24:53
【问题描述】:

我已经构建了自己的 K-ary 树,其中包含存储有关文件系统条目的数据的节点。我希望能够以JScrollPane 或类似的方式显示它。我现在找到了JTree 类,但我正在努力寻找如何有效地将信息从我的树转换到JTree,同时仍然保持我的树功能,例如我希望能够选择一个来自JTree 的节点并从我自己的树中获取信息。

public class DirectoryTree implements Serializable {

    private TreeNode Root;
    private int numNodes;

    private TreeNode Focus;
    private LocalDateTime date;

    private long totalSizeOnDisk;

我最初决定创建一个类NodeWithButton,并使用按钮在滚动窗格上创建一个树层次结构,但我必须递归地创建它们和它们的侦听器,这一切都变得有点难以处理。

【问题讨论】:

  • Swing 基于数据模型。当您有自己的数据希望 Swing 组件显示时,您可以编写自己的模型来包装您的数据。在这种情况下,您应该编写自己的 TreeModel 实现。
  • 另见File Browser GUI
  • @VGR 你的意思是我应该编写另一个实现 TreeModel 并包含我的 DirectoryTree 对象的类,然后让 JScrollPane 显示它?
  • 第一部分是的,但 JScrollPane 与它无关。
  • @AndrewThompson 谢谢!这将有很大帮助。

标签: java swing tree jscrollpane jtree


【解决方案1】:

万一有人偶然发现,这是一个相当简单的解决方案。

JScrollPane 将 TreeModel 作为构造函数的参数,因此根据 cmets 中 VGR 的提示,我刚刚创建了一个新类 DirectoryTreeModel,它实现了 TreeModel,并包含了我的 DirectoryTree 的一个实例,然后用我的自己的树函数。 例如:

@Override
public Object getChild(Object parent, int index) {

    TreeNode p = (TreeNode) parent; //got to cast the object class into my TreeNode class
    return p.getChildren().get(index);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多