2016-06-17 5 views
0

나는 Justinmind의 API를 사용하여 플러그인을 개발하고 있습니다. 기본적으로 ID로 요소를 찾는 것이 필요합니다. 그러나 API는 findById()과 같은 메서드가없는 것 같습니다. 전체 설명서를 검색했을 때 here입니다. 나는 방법을 만들어야한다고 가정합니다. 나는이 페이지를 디자인 할복잡한 개체 내에서 개체 찾기

enter image description here

: 문제가

내가 다음 페이지 레이아웃을 가지고 있다고 가정 Justinmind 특정 아니지만 여기서 내가 문제 및 Justinmind의 일반적인 구조의 세부 사항을 설명하고있다 Justinmind 다음 hieararchy 같이 : Justinmind의 API에서

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

, 화면은 ICanvas 개체입니다. 화면을 myScreen 변수에 저장합니다. 그런 다음 getApiRoot()은 페이지의 맨 위 구성 요소를 반환합니다. 그 후에 모든 구성 요소는 자식이며 getApiChildren() 메서드를 통해 액세스 할 수 있습니다.

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

위의 코드는 이미지, 그룹 및 텍스트, 즉 첫 번째 주문 검색 구성 요소를 반환합니다.

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

그러나,이 구조는 항상 변경됩니다. 나무 나 해시 맵을 만들어야합니까? 매우 복잡한 객체 안에서 객체를 찾는 가장 좋은 방법은 무엇입니까?

답변

1

나는 justinmind를 모른다. 그러나 자바에 복잡한 객체의 그래프가 있다면이 라이브러리 http://commons.apache.org/proper/commons-jxpath/을 사용하고 XPATH 구문을 사용하여 쿼리를 지정할 수 있습니다.

+0

실현 가능한 해결책처럼 보입니다. 나는 그것을 시도 할 것이다, 고마워! –