web-dev-qa-db-ja.com

GWTのCellTableの行にclickHandlerを追加しますか?

基本的なCellTableを作成し、いくつかのデータを入力しました。次に、各行にclickHandlerを追加したいのですが、これを行う方法がわかりません。テーブル全体に対してclickEventを作成しましたが、行ごとに1つ必要です。

    table.sinkEvents(Event.ONCLICK);
    table.setTitle("Click me");
    table.setSize("600px", "600px");
    table.addDomHandler(new ClickHandler()
    {
        @Override
        public void onClick(ClickEvent event)
        {
            Window.alert("You clicked!" +);

        }
    }, ClickEvent.getType());

各行にclickEventを追加するのと同じようなことはできますか?

14
gusper

CellTableには、クリックイベントの処理のサポートが組み込まれています。行がクリックされたときに呼び出されるCellPreviewHandlerを追加できます。ネイティブイベント、セル、データ行の値など、イベント内のいくつかのアイテムを受け取ります。クリックイベントだけでなく、クリックイベントが発生したかどうかを確認する必要があります。合格したイベントをテストするだけです:boolean isClick = "click".equals(event.getNativeEvent().getType())

もう1つのオプションは、保護されたメソッドdoSelectionを拡張することですが、非推奨であり、クリックが行われたときに呼び出されるように、正しいKeyboardSelectionPolicyが設定されていることを確認する必要があります。後者については、インターフェースKeyboardSelectionPolicyのJavaDocを参照してください。

29

セルを選択する別の方法は、NoSelectionModelを使用して作成し、それをテーブルに追加することができます。

//EDIT: this is a field, not a local variable
TheCellObject clickedObject; //the object selected by selectionModel

final NoSelectionModel<TheCellObject> selectionModel = new NoSelectionModel<TheCellObject>();

    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

                @Override
                public void onSelectionChange(SelectionChangeEvent event) {
                    clickedObject = selectionModel.getLastSelectedObject();
                }
            });
cellTable.setSelectionModel(selectionModel); //add selection model to your celltable
19
Noya