我想显示一个对象中的所有字段以及该字段的所有字段等,等等。所以基本上是一个对象的“图形”或层次结构。
JTree 就足够了,但是为了在 Java Swing 中显示对象的图形,还有其他人可以推荐的吗?
为了澄清,我想以编程方式执行此操作,并且我想对任何 java 对象执行此操作。
这个问题与以下内容几乎相同:
我想显示一个对象中的所有字段以及该字段的所有字段等,等等。所以基本上是一个对象的“图形”或层次结构。
JTree 就足够了,但是为了在 Java Swing 中显示对象的图形,还有其他人可以推荐的吗?
为了澄清,我想以编程方式执行此操作,并且我想对任何 java 对象执行此操作。
这个问题与以下内容几乎相同:
您正在寻找的是将对象图序列化为可以在 JTree 中显示的数据结构。这是一项非常复杂的任务,涉及大量工作。要正确执行此操作,您需要执行以下操作(这只是一个摘要):
确定您将使用的数据结构(可能是 TreeNode 的实现或等效的东西)来表示对象和字段
使用反射递归地探索对象图。对于每个类,探索包括完整继承链中的字段;然后对于每个字段,如果它不是原始类型,则对其类执行相同的操作;还要确保在每个非公共字段上调用 setAccessible(true) 以实际访问它
处理对象引用循环,您不想永远循环并以 StackOverflowError 或无限树结束。您将需要想办法将对象的引用链接到 JTree 中的实际内容。这是我发现 IdentityHashMap 有用且可取的情况之一。
我的建议是不要从头开始。您可以从各种来源中找到灵感,例如:java.io.ObjectOutputStream 及其附带类的来源,或其他开源序列化框架,如XStream或Kryo或其他一堆。
前段时间我个人已经为特定目的实施了这样一个框架,这就是为什么我知道它可能会带来的痛苦。您可以在此处找到源代码(从JPPFObjectOutputStream类开始)。