GWT‎ > ‎

GWT Editor Framework

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を保持するだけのEditor

SimpleEditor
編集はせず単純に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;
                }
            }
        }
    }

Comments