2012-08-13 13 views
5

私は、TextCellとButtonCellで構成されるCompositeCellを作成しようとしています。私は、通常はColumnにCompositeCellを追加し、次にCellTableにColumnを追加したいと思います。しかし、私は列のインスタンスがどのようにすべきかを理解することができません。特に、私は、次のコードに、その型パラメータを見つけることができない。gwtアプリケーションの複合セル

Column<FilterInfo, ?> compositeColumn = new Column<FilterInfo, ?>(createCompositeCell()) { 

    @Override 
    public Object getValue(Object object) { 
    // TODO Auto-generated method stub 
    return null; 
    }}; 

カスタムクラスFilterInfoのCompositeCellを作成する方法を(それが必要なのか?)である:

private CompositeCell<FilterInfo> createCompositeCell(){ 

HasCell<FilterInfo, String> filterName = new HasCell<FilterInfo, String>() { 

    public Cell<String> getCell() { 
    return new TextCell(); 
    } 

    public FieldUpdater<FilterInfo, String> getFieldUpdater() { 
    // TODO Auto-generated method stub 
    return null; 
    } 

    public String getValue(FilterInfo object) { 
    return object.getFilterName(); 
    }}; 

    HasCell<FilterInfo, String> filterButton = new HasCell<FilterInfo,String>(){ 

    public Cell<String> getCell() { 
     return new ButtonCell(); 
    } 

    public FieldUpdater<FilterInfo, String> getFieldUpdater() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public String getValue(FilterInfo object) { 
     // TODO Auto-generated method stub 
     return "..."; 
    } 
    }; 

    List<HasCell<FilterInfo, ?>> cells = new ArrayList<HasCell<FilterInfo, ?>>(); 
    cells.add(filterName); 
    cells.add(filterButton); 

    CompositeCell<FilterInfo> compositeCell = new CompositeCell<FilterInfo>(cells); 

    return compositeCell; 

}

希望のCompositeCellを作成し、それをCellTableに正しく追加するために、コードや他の提案を適応させることに感謝します。

答えて

3

複合セルを使用する必要がありますか?私にとっては、これはたくさんの作業のように思えます。独自のカスタムセルを作成するほうがずっと簡単です。

は、私は、テキストセルのテキストをレンダリングするGXTのXTemplateを使用してcompositecell(Checkboxcell + TextCell)を作成しCreating Custom Cells

+0

私はこれを試してみましたが、それはカスタムセルで行うことができます。良いアプローチ。 – arjacsoh

1

あなたCellTableFilterInfoのリストを受け取り、あなたのCellFilterInfoをとり、その後、IdentityColumnを使用している場合。

0

上のドキュメントの読み取りを持っています。純粋なGWTに固執し、他のGXTウィジェットをGWTで置き換えたい場合はテンプレートを使用してください。

https://gist.github.com/Aadi1/4949994

2

ここでtypeパラメータにあまりを集中しようとしないでください。 IDEがスマートすぎて、タイプエラーが発生します。 "Raw Type。XXX < C>をパラメータ化する必要があります"と訴えますが、そのようにコードをコンパイルして実行できるはずです。ここで

は、NボタンのCompositeCellの列を持っているコードです:

private Column<DTO, DTO> getButtonColumn() { 
    return new Column<DTO, DTO>(getButtonsCell()) { 
     @Override 
     public DTO getValue(DTO object) { 
      return object; 
     } 
    }; 
} 

private CompositeCell getButtonsCell() { 
    HasCell<DTO,DTO> button1 = new AbstractActionButton<DTO>() { 
       @Override 
       public void execute(final DTO object) { 
        //Action on button click 
       } 

       @Override 
       public void render(Context context, DTO data, SafeHtmlBuilder sb) { 
        // 
       } 
      }; 
    HasCell<DTO,DTO> button2 = new AbstractActionButton<DTO>(){ 
     //Complete me ... 
    } 

    List<HasCell<DTO, ?>> cells = new LinkedList<>(); 
    cells.add(button1); 
    cells.add(button2); 
    CompositeCell<DTO> compositeCell = new CompositeCell<>(cells); 

    return compositeCell; 
} 


public abstract class AbstractActionButton<DTO> implements HasCell<DTO, DTO> { 

@Override 
public Cell<DTO> getCell() { 
    return new ActionCell<DTO>("Button title", new ActionCell.Delegate<DTO>() { 
     @Override 
     public void execute(DTO object) { 
      AbstractActionButton.this.execute(object); 
     } 
    }) { 
     @Override 
     public void render(Context context, DTO data, SafeHtmlBuilder sb) { 
      AbstractActionButton.this.render(context, data, sb); 
     } 
    }; 
} 

//Replaced by delegate but still need to be overriden 
@Override 
public FieldUpdater<DTO, DTO> getFieldUpdater() { 
    return null; 
} 

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

/** 
* You can override this method to render your button differently. Not mandatory 
* @param context 
* @param data 
* @param sb 
*/ 
public abstract void render(Context context, DTO data, SafeHtmlBuilder sb); 

/** 
* Called when the button is clicked 
* @param object 
*/ 
public abstract void execute(DTO object); 
}