14

基本的な 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 を追加するのと同様のことはできますか?

4

2 に答える 2

30

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

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

于 2011-04-26T16:24:46.937 に答える
18

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
于 2011-05-30T14:25:19.457 に答える