在复杂对象中查找对象

时间:2016-06-17 09:08:47

标签: java object tree justinmind

我正在使用Justinmind的API来开发插件。我需要的是基本上通过ID查找元素。但是,当我搜索整个文档时,API似乎没有类似 findById()的方法 here。我假设我必须创建一个方法。在这里,我将解释Justinmind中问题和一般结构的细节,尽管问题不是Justinmind特有的

假设我有以下页面布局:

enter image description here

我会在Justinmind中设计这个页面,如下面的hieararchy:

Screen
----Image
----Group
--------Button
------------Image
------------Label
--------Button
------------Image
------------Label
--------Button
------------Image
------------Label
--------Button
------------Image
------------Label
--------Button
------------Image
------------Label
--------Button
------------Image
------------Label
----Text
----Text
----Text

在Justinmind API中,屏幕是 ICanvas 对象。我将屏幕存储在 myScreen 变量中。然后, getApiRoot()返回页面的最顶层组件。之后,每个组件都是一个子组件,可以通过 getApiChildren()方法访问。

List<IComponent> components = myScreen.getApiRoot().getApiChildren();

上面的代码返回Image,Group和Texts,即一阶hiearchy组件。例如,我可以按如下方式访问第一个按钮的标签(OVERVIEW)

IComponent group = components.get(1); //Returns the Group
IComponent button1 = group.getApiChildren().get(0); //Returns the first button group, which is the first child of group
IComponent label1 = button1.getApiChildren().get(1); //Returns the label, which is the second child of the first button group

如您所见,我总是通过 getApiChildren()方法访问组件。这在大型动态页面中不太可行。例如,因为我正在编写的插件会在按钮组中缺少标签时发出警报。为了检查标签的存在,我必须使用 getApiChildren()方法遍历所有屏幕的组件。

我可以通过树来表示:

enter image description here

但是,这种结构总会改变。我应该构建一个树,还是一个hashmap?在非常复杂的对象中查找对象的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我不知道。但是如果你在java中有一个复杂对象的图形,你可以试试这个库http://commons.apache.org/proper/commons-jxpath/并使用XPATH语法来指定你的查询。