Editor FrameworkとはPOJOのObjectと、UIとのやり取りを簡単にしてくれます。 UIBinderを使ったコード向けかもしれません。 簡単なEditor Framework firstNameとlastNameというフィールドを持つNamesというオブジェクトと、それを表示・編集可能なUIを使った例です。 Editor Frameworkを使ったおかげで、本来ならNamesからgetした値を、UIに設定したり、UIの編集内容をgetして新しいNamesを作るのが非常に単純になっています。 package test.test.client;
import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.editor.client.Editor; import com.google.gwt.editor.client.LeafValueEditor; import com.google.gwt.editor.client.SimpleBeanEditorDriver; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel;
/** * Entry point classes define <code>onModuleLoad()</code>. */ public class GWTTest implements EntryPoint { interface Driver extends SimpleBeanEditorDriver<Names, NamesEditor> {} Driver driver = GWT.create(Driver.class); /** * This is the entry point method. */ public void onModuleLoad() { NamesEditor editor=new NamesEditor(); driver.initialize(editor); driver.edit(new Names("hello", "world")); RootPanel.get().add(editor); Button bt=new Button("ok"); bt.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Window.alert(""+driver.flush()); } }); RootPanel.get().add(bt); } /** * privateだとアクセスできない * @author aki * */ public class NamesEditor extends VerticalPanel implements Editor<Names>{ TextBox firstName; TextBox lastNameEditor; public NamesEditor(){ firstName=new TextBox(); lastNameEditor=new TextBox(); add(firstName); add(lastNameEditor); } }
public class Names{ public String toString(){ return firstName+lastName; } public Names(String first,String last){ this.firstName=first; this.lastName=last; } private String firstName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } private String lastName; }
}
Objectを保持するだけのEditorSimpleEditor 編集はせず単純にObject値を保持するだけのEditorとして、SimpleEditorというのが用意されてある。
Int,Double LongのEditor単純に、数値を文字列で編集する場合、IntBox,DoubleBox,LongBoxがある。 この任意のテキストとObjectを相互に変換するのは、RendererとParserのinterfaceで処理している。 Editors対応してない、Widget用にEditorを簡単に作成できます。
ListBox用のEditor 値は文字列 public static class ListBoxEditor implements LeafValueEditor<String>{ ListBox listBox; protected ListBoxEditor(ListBox listBox){ this.listBox=listBox; } public static ListBoxEditor of(ListBox listBox) { return new ListBoxEditor(listBox); } @Override public String getValue() { if(listBox.getSelectedIndex()<0){ return null; } return listBox.getValue(listBox.getSelectedIndex()); }
@Override public void setValue(String value) { for(int i=0;i<listBox.getItemCount();i++){ if(listBox.getValue(i).equals(value)){ listBox.setSelectedIndex(i); break; } } } }
|