1

ノードのプロパティを視覚化および編集するために、PropertySheetView コンポーネントを使用しています。このビューは、オブジェクトの最新のプロパティを常に反映する必要があります。別のプロセスでオブジェクトに変更があった場合、何らかの方法でビューを更新して、更新されたプロパティを確認したいと考えています。

私がこれを行うことができた最良の方法は、次のようなものです ( 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 の解決策は、このスレッドから得られます。

4

3 に答える 3

3

未登録ユーザーとしての私の古い回答について明確にするために、電話をかけるcreateSheet(null)NullPointerException. setSheet(createSheet())代わりに使用してください。

于 2016-11-15T02:51:42.570 に答える
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 オブジェクトは、プロパティの背後にあるドメイン オブジェクトの変更をサポートする必要があります。

于 2010-07-26T14:29:24.037 に答える
1

ノードのプロパティ シートをnullに設定して、createSheetメソッドを再度呼び出すこともできます。

于 2012-08-22T14:59:17.043 に答える