0

私の問題はこれとほとんど同じです: ポリモーフィック型の ListEditor トーマスは良い答えを出しましたが、私にとっては十分ではありません。

異なる可能性のあるオブジェクトのリストを表示したいので、各エディターを異なる方法で表示できます。問題が見つからなかったことを除いて、ほとんど機能します。現在の値を取得して保存することは不可能です。(setValueメソッドは自動的に呼び出さなければならないと思いますが、自分で呼び出さなければなりません)

コードの一部を次に示します。

ShapeListEditor :

public class ShapeListEditor extends VerticalLayoutContainer implements IsEditor<ListEditor<ShapeProxy, ShapeEditorWrapper>> {
public class ESource extends EditorSource<ShapeEditorWrapper> {

    @Override
    public ShapeEditorWrapper create(int index) {
        ShapeEditorWrapper subEditor = new ShapeEditorWrapper(index);
        subEditor.setLayoutData(new VerticalLayoutData(1, -1, new Margins(20, 20, 40, 20)));
        insert(subEditor, index);
        return subEditor;
    }

    @Override
    public void dispose(ShapeEditorWrapper subEditor) {
        remove(subEditor);
    }

    @Override
    public void setIndex(ShapeEditorWrapper editor, int index) {
        insert(editor, index);
    }
}

private ListEditor<ShapeProxy, ShapeEditorWrapper> editor = ListEditor.of(new ESource());

@Override
public ListEditor<ShapeProxy, ShapeEditorWrapper> asEditor() {
    return editor;
}
}

ShapeEditorWrapper :

public class ShapeEditorWrapper extends Composite implements ValueAwareEditor<ShapeProxy> {

private SimplePanel panel = new SimplePanel();

@Path("")
ShapeEditor ShapeEditor;

public ShapeEditorWrapper(int index) {
    super();
    initWidget(panel);
}


@Override
public void setValue(ShapeProxy value) {
    if (ShapeEditor == null) {
        if (value == null) {

        } else if (value.getShapeType() == ShapeTypeEnum.SQUARE) {
            ShapeEditor = new ShapeSquareEditor();
            ShapeEditor.setValue(value);
            panel.setWidget(ShapeEditor);
        } else if (value.getShapeType() == ShapeTypeEnum.TRIANGLE) {
            ShapeEditor = new ShapeTriangleEditor();
            panel.setWidget(ShapeEditor);
        } 
    } 

}
}

シェイプエディタ :

public class ShapeEditor extends VerticalLayoutContainer implements ValueAwareEditor<ShapeProxy> {

public ShapeEditor() {
    super();
}

@Override
public void setValue(ShapeProxy value) {
}

@Override
public void setDelegate(EditorDelegate<ShapeProxy> delegate) {
    // TODO Auto-generated method stub

}

@Override
public void flush() {
    // TODO Auto-generated method stub

}

@Override
public void onPropertyChange(String... paths) {
    // TODO Auto-generated method stub

}

}

ShapeTriangleEditor と ShapeSquareEditor は同じプロパティを持っていますが、同じ表示にしたくありません。このクラスは setValue() をオーバーライドし、適切な値で表示されるフィールドを作成して表示します。ただし、値を変更しても、変更は検出されません。

誰かが私が逃したものを教えてもらえますか?

前もって感謝します

4

1 に答える 1