【问题标题】:TreeModel creation树模型创建
【发布时间】:2013-11-27 18:55:32
【问题描述】:

我对 Java 中的树模型有一些疑问。

在过去 13 周的课堂上,我们一直在开发联系人管理器。此联系人管理器具有各种组件:联系人可以是业务联系人或个人联系人,并且每个联系人都有自己的一组事件。他们还有地址、社交网络和电话号码。

最后一项任务是我们必须从外部 txt 文件中读取信息并在我们的项目中实现它。一切顺利。现在他希望我们根据所述文本中的信息构建一个树模型,但我很难理解这个树模型是如何工作的。

例如,根、父、子、节点都是我试图定义但很难定义的词。在这种情况下,我的根是我的联系人经理,我的父母是联系人,孩子是地址和东西吗?如果有人能帮助我理解它,那真的很有帮助。

如果它可以帮助您更多地理解我的问题,这里是作业的摘录:

  • 创建扩展 JFrame 的类 ContactManagerFrame。它的构造函数将使用一个 ContactManager 对象作为参数(从保存在磁盘上的序列化文件中检索)。

  • 创建和布局所需的图形组件。 (提示:使用 JPanel 对过滤功能的组件进行分组,将 JTree 添加到 JScrollPane,添加组件时使用 BorderLayout)

  • Create 方法 createNodes() 将 DefaultMutableTreeNode 对应于树的根(即“Contacts”节点)和一个与用户指定的过滤器对应的字符串作为参数。此方法应为联系人和每个联系人引用的对象创建节点,并将它们组织成树状结构,如图 1 所示。应避免创建空父节点(例如,如果联系人没有任何地址,您不应为此特定联系人添加父节点“地址”)。如果指定的过滤器是一个空字符串,createNodes() 将包括存储在 ContactManager 对象中的所有联系人。在任何其他情况下,createNodes() 将在 ContactManager 中包含由方法 searchContacts() 返回的联系人。

  • 从根节点创建一个 DefaultTreeModel 对象。使用 DefaultTreeModel 初始化 JTree 组件。'

我不是要你们中的任何人为我或任何事情解决它。我只是真的很想了解它。非常感谢!

【问题讨论】:

  • 你需要请你的导师解释你的作业细节。不在这里发帖。
  • 树形结构大概如图1所示,查一下。
  • 不一定是它的外观或任何我似乎无法理解的东西,这是我似乎无法掌握的树模型的整个概念。
  • 这正是我一直在看的,我只是无法理解它。虽然非常感谢你甚至抽出时间来帮助大家,非常感谢。

标签: java swing tree treemodel


【解决方案1】:

JTreeJTableJListJComboBox 等更复杂的 Swing 组件使用 model 的概念。这意味着:组件正在显示的下层数据。它们以这种方式设计为将数据本身与其“视觉”表示(也称为 视图)分开,并允许开发人员“忘记”(或多或少)关于数据表示。如tutorials 中所述,如果您需要添加一个新数据对象以显示在这些组件之一上,您只需将其添加到 model视图将自动更新。

话虽如此,您会看到这些组件有一个以模型作为参数的构造函数:

这些模型由接口定义,这些接口建立了任何具体实现都必须满足的基本契约。

特别是在JTree 的情况下,我们有TreeModel 接口和默认实现:DefaultTreeModel。此外,任何TreeModel 都必须与必须实现TreeNode 接口的节点对象一起使用。

因此,要使用JTree,您需要一个TreeModel 和一堆通过父子关系关联的TreeNodes。比如这样的:

DefaultMutableTreeNode root = new DefaultMutableTreeNode("Contacts"); // root node

DefaultMutableTreeNode contact1 = new DefaultMutableTreeNode("Contact # 1"); // level 1 node
DefaultMutableTreeNode nickName1 = new DefaultMutableTreeNode("drocktapiff"); // level 2 (leaf) node
contact1.add(nickName1); 

DefaultMutableTreeNode contact2 = new DefaultMutableTreeNode("Contact # 2");
DefaultMutableTreeNode nickName2 = new DefaultMutableTreeNode("dic19");        
contact2.add(nickName2);

root.add(contact1);
root.add(contact2);

DefaultTreeModel model = new DefaultTreeModel(root);
JTree tree = new JTree(model);

图片

【讨论】:

  • 哇,这真是完美的解释,非常感谢老兄!如果你住在附近,我会给你买一个啤酒人,你就是救命稻草。说真的,在过去的三个小时里,我一直在努力准确地掌握你用不到 300 个字解释的内容.. 非常感谢您
  • 完成!我的程序还有很多问题要解决,但这将有助于艰苦的战斗哈哈谢谢一群家伙!
  • 哈哈我很高兴听到这个消息!祝你好运,如果遇到困难,请随时提出新问题。 @drocktapiff
猜你喜欢
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多