2012-05-01 13 views
3

CompositeCell Javaを使用してGWT内の表のセルの内容をカスタマイズすることができます。他のほとんどのウィジェットのグループをテーブルのセル内に配置して、必要に応じてレイアウトすることができます。問題は、htmlタグを使用して別のテーブルとしてCompositeCellのレイアウトを定義した場合(匿名クラスのCompositeCellの実装を参照)、セルのコンポーネントのイベント処理が緩和されているということです。私たちがコンポジットセルの匿名実装をコメントしている場合は、イベントハンドリングの応答としてポップアップを実現します。GWT:複合セル内のイベントの処理

私は、コンポジットセルの匿名実装をコンテキスト、要素、C、NativeEvent、ValueUpdater )私は、HTMLテーブルタグを使ったセルレイアウトの定義は、GWTウィジェット階層内のイベントチェーンを壊しているが、これまで成功していないと思うからです。

備考:コードのコメント付きバージョンと非コメント化バージョンの両方が同じGUIレイアウトを実現します。この例では、セルのコンテンツをカスタマイズするときにイベント処理を緩和することを示しています。

public class ActionCellTest implements EntryPoint { 

    private static final String SERVER_ERROR = "An error occurred while " + "attempting to contact the server. Please check your network " 
      + "connection and try again."; 

    private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class); 

    public void onModuleLoad() { 
     CellTable<Person> table = new CellTable<ActionCellTest.Person>(); 

     final List<HasCell<Person, ?>> cells = new LinkedList<HasCell<Person, ?>>(); 
     cells.add(new HasCellImpl("first name", new ActionCell.Delegate<Person>() { 

      @Override 
      public void execute(Person object) { 
       Window.alert(object.getFirstName()); 
      } 
     })); 
     cells.add(new HasCellImpl("last name", new ActionCell.Delegate<ActionCellTest.Person>() { 

      @Override 
      public void execute(Person object) { 
       Window.alert(object.getLastName()); 
      } 
     })); 

     CompositeCell<Person> cell = new CompositeCell<Person>(cells) { 

      @Override 
      public void render(Context context, Person value, SafeHtmlBuilder sb) { 
       sb.appendHtmlConstant("<table><tbody><tr>"); 
       for (HasCell<Person, ?> hasCell : cells) { 
        render(context, value, sb, hasCell); 
       } 
       sb.appendHtmlConstant("</tr></tbody></table>"); 
      } 

      @Override 
      protected <X> void render(Context context, Person value, SafeHtmlBuilder sb, HasCell<Person, X> hasCell) { 
       Cell<X> cell = hasCell.getCell(); 
       sb.appendHtmlConstant("<td>"); 
       cell.render(context, hasCell.getValue(value), sb); 
       sb.appendHtmlConstant("</td>"); 
      } 

      @Override 
      protected Element getContainerElement(Element parent) { 
       return parent.getFirstChildElement().getFirstChildElement().getFirstChildElement(); 
      } 

     }; 
     table.addColumn(new TextColumn<ActionCellTest.Person>() { 

      @Override 
      public String getValue(ActionCellTest.Person object) { 
       return object.getFirstName() + " " + object.getLastName(); 
      } 
     }, "name"); 

     table.addColumn(new Column<Person, Person>(cell) { 

      @Override 
      public Person getValue(ActionCellTest.Person object) { 
       return object; 
      } 
     }, "composite"); 

     LinkedList<Person> data = new LinkedList<ActionCellTest.Person>(); 
     data.add(new Person("Amy", "Reed")); 
     data.add(new Person("Tim", "Gardner")); 
     table.setRowData(data); 

     RootPanel.get().add(table); 
    } 

    private class HasCellImpl implements HasCell<Person, Person> { 
     private ActionCell<Person> fCell; 

     public HasCellImpl(String text, Delegate<Person> delegate) { 
      fCell = new ActionCell<Person>(text, delegate); 
     } 

     @Override 
     public Cell<Person> getCell() { 
      return fCell; 
     } 

     @Override 
     public FieldUpdater<Person, Person> getFieldUpdater() { 
      return null; 
     } 

     @Override 
     public Person getValue(Person object) { 
      return object; 
     } 
    } 

    private class Person { 
     private String fFirstName; 
     private String fLastName; 

     public Person(String first, String last) { 
      fFirstName = first; 
      fLastName = last; 
     } 

     public String getFirstName() { 
      return fFirstName; 
     } 

     public String getLastName() { 
      return fLastName; 
     } 
    } 
} 

答えて

2

これは今後のGWT 2.5(数週間)で修正される予定既知の問題です:http://code.google.com/p/google-web-toolkit/issues/detail?id=5714
(平均時間では、あなたがトランクをオフに実行したり、変更をバックポートしてみてください)

+0

私は使用しました。CompositeCell.javaのすべてのソルをコピーし、私が望むようにカスタマイズし、 'CustomCompositeCell celll = new ...'として作成します。私のnoobのアイデアを申し訳ありませんが動作します:D – Cataclysm

+0

私は今gwt2.5を使用していますが、まだエラーが発生します。 – Cataclysm

関連する問題