Найти объект внутри сложного объекта

Я использую API Джастинминда для разработки плагина. Что мне нужно, это в основном поиск элемента по идентификатору. Однако API, похоже, не имеет метода, подобного findById (), так как я искал всю документацию здесь. Я предполагаю, что должен создать метод. Здесь я объясняю детали проблемы и общей структуры в Justinmind, хотя проблема не является специфичной для Justinmind

Предположим, что у меня есть следующий макет страницы:

введите описание изображения здесь

Я бы разработал эту страницу в Justinmind, как показано ниже:

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, т.е. высокоуровневые компоненты первого порядка. Например, я могу получить доступ к метке первой кнопки (ОБЗОР) следующим образом:

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().

Я могу представить это через дерево:

введите описание изображения здесь

Однако эта структура всегда будет меняться. Должен ли я построить дерево или хэш-карту? Как лучше всего найти объект внутри очень сложного объекта?

1 ответ

Решение

Я не знаю, просто разум. Но если у вас есть график сложного объекта в Java, вы можете попробовать эту библиотеку http://commons.apache.org/proper/commons-jxpath/ и использовать синтаксис XPATH, чтобы указать свой запрос.

Другие вопросы по тегам