2010-04-11 3 views
1

PropertySheetView 구성 요소를 사용하여 노드의 속성을 시각화하고 편집합니다. 이 뷰는 항상 객체의 가장 최근 속성을 반영해야합니다. 다른 프로세스에서 개체가 변경되면 어떻게 든 새로 고쳐서 업데이트 된 속성을보고 싶습니다.NetBeans 플랫폼 - 노드의 등록 정보 시트보기를 새로 고치는 방법?

내가이 일을 할 수 있었다 가장 좋은 방법은 (객체의 변화에 ​​게시 및 구독 EventBus 라이브러리 만들기 사용) 다음과 같은 것입니다 :이 작동

public DomainObjectWrapperNode(DomainObject obj) { 
    super (Children.LEAF, Lookups.singleton(obj)); 
    EventBus.subscribe(DomainObject.class, this); 
} 

public void onEvent(DomainObject event) { 
    // Do a check to determine if the updated object is the one wrapped by this node; 
    // if so fire a property sets change 

    firePropertySetsChange(null, this.getPropertySets()); 
} 

하지만 스크롤에 내 자리 시트가 새로 고침되면 손실됩니다. 그것은 목록의 맨 위로보기를 재설정하고 나는 새로 고침 작업 이전의 위치로 다시 스크롤해야합니다.

내 질문에, 노드의 속성 시트보기를 새로 고치는 더 좋은 방법이 있습니까? 구체적으로 새로 고칠 때 속성 목록의 내 위치가 손실되지 않도록 할 수 있습니까?

firePropertySetsChange의 해답은 this thread에서 비롯됩니다.

답변

1

해결 방법은 업데이트 된 개체의 변경된 각 속성에 대한 속성 변경을 발생시키는 것입니다. 속성 집합은 그 속성 에디터로 엉망처럼 변경되어서는 안된다는

public void onEvent(DomainObject event) { 
    // Do a check to determine if the updated object is the one wrapped by this node; 
    // if so fire a property sets change 

    Set<Property> changes = new HashSet<Property>(); 
    // Populate the set from property set of the node using the event 
    // (or add all properties to force updating all properties) 

    for (Property change : changes) { 
     firePropertyChange(change.getName(), null, change.getValue()); 
    } 
} 

주 : 그래서, 문제의 코드 조각의 맥락에서이 같은 일을 할 수 있습니다. 결과적으로 실제 Property 객체는 속성 뒤에있는 도메인 객체의 변경을 지원해야합니다.

1

노드의 속성 시트를 null으로 설정할 수도 있으므로 createSheet 메서드가 다시 호출됩니다.

2

등록되지 않은 사용자로 내 이전 답변에 대해 설명하기 만하면 : createSheet(null)을 호출하면 NullPointerException가됩니다. 대신 setSheet(createSheet())을 사용하십시오.

관련 문제