0

私の仕事は、新しい行を追加するためのコントロールを備えたテーブルを作成することです。この一般的なコントロールは、対応する一連のTextEditsと「新しい行を追加」ボタンで構成されている必要があります。

CellTableを使用しています。

この「ウィジェットの追加」は、一部のパネルでボタンと必要なフィールドを組み合わせるだけで個別に作成できますが、テーブルにバインドしてみたいと思います。CellTableを使って作りたいです。この目的のために、私はCellTableのヘッダーを利用しようとしています。ヘッダーを作成し、EditCellTextとButtonCellを追加しました。私には2つの問題があります:

  • ボタンは表示されていません。代わりに、getValue()メソッドによって返される値が表示されます。
  • そのボタンのクリックを処理する方法がわかりません。

[1]最後に、最初の質問は、CellTableのヘッダーにボタンを追加するにはどうすればよいですか。また、そのボタンのクリックをどのように処理しますか。ボタンは、クリック領域だけでなく、ボタンのように見える必要があります。

[2]おそらく私の仕事を達成する別の方法があります。異なる行が異なるボタンを保持するCellTableを作成することは可能ですか?つまり、最初の行には[追加]ボタンがあり、他のすべての行には[削除]ボタンがあります。GWTはこれを行うことができますか?

[3]もう1つ質問があります。現時点では、Javaコードを使用してCellTableの構造を説明しています。つまり、親ウィジェットの作成中に、列オブジェクトとヘッダーオブジェクトを手動で作成して追加します。CellTableの構造をXMLで表現することはできますか?つまり、mySpecialCellTable.ui.xmlファイルを使用することはできますか?

4

2 に答える 2

6
public static class BtnHeader extends Header<String>{

    public BtnHeader(ButtonCell cell) {
        super(cell);

    }
     @Override
       public void onBrowserEvent(Context context, Element elem, NativeEvent nativeEvent)
       {
          int eventType = Event.as(nativeEvent).getTypeInt();
          if (eventType == Event.ONCLICK)
          {
             nativeEvent.preventDefault();
            updateHeader();
          }
       }
    @Override
    public String getValue() {
        return "Click!";
    }
    protected void updateHeader() {
        // TODO to redefine in a defiant class

    }

 }

そしてあなたのコードで

BtnHeader header = new BtnHeader(new ButtonCell()){
                @Override
                protected   void updateHeader(){
                    // Actions when clicking button
                }

cTable.addColumn(column, header);
于 2012-11-15T09:45:33.483 に答える
1

テーブルにボタンを表示するには、ButtonCellを使用できます。

Column<MyObject, String> delete = new Column<MyObject, String>(new ButtonCell()) {

            @Override
            public String getValue(final MyObjectobject object) {
                return "delete";
            }
        };

        delete.setFieldUpdater(new FieldUpdater<MyObject, String>() {

            @Override
            public void update(final int index, final MyObjectobject object, final String value) {

                myActivity.delete(object); // to whatever should happen if button is clicked
            }
        });

これは2番目の質問にも答えるはずです。私の知る限り、Javaクラスに列を追加する必要があります。uibinderファイルでは、セルテーブル全体のみを追加できます。

<p1:CellTable ui:field="table"></p1:CellTable>

お役に立てれば。

于 2012-06-20T06:01:48.803 に答える