私の問題はこれとほとんど同じです: ポリモーフィック型の 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() をオーバーライドし、適切な値で表示されるフィールドを作成して表示します。ただし、値を変更しても、変更は検出されません。
誰かが私が逃したものを教えてもらえますか?
前もって感謝します