0

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

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

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

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

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

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

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

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

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

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

4

1 回答 1

2

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

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

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

特别是在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);

图片

在此处输入图像描述

于 2013-11-27T21:22:22.440 回答