0

そのため、クリック イベント選択モデルが正常に機能するセル テーブルがあります。後で、上矢印と下矢印を押して強調表示された行を変更できることを知りましたが、実際に SelectionChangeEvent を呼び出すには Space を押す必要があります。UP および DOWN イベントをキャッチし、SPACE イベントを発生させることで、少しごまかそうとしています。悲しいことに、それは機能しません:(これが私のコードです。

        table.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
        table.sinkEvents(Event.KEYUP);
        table.sinkEvents(Event.KEYDOWN);
        table.sinkEvents(32);
        table.addHandler(new KeyUpHandler(){
            @Override
            public void onKeyUp(KeyUpEvent event)
            {
                System.out.println(event.getNativeKeyCode());
                if(event.getNativeEvent().getKeyCode() == 40)
                {
                    // down is pressed
                    int i = rows.getFilterList().indexOf(selectionModel.getLastSelectedObject())+1;
                    if(i >= 0 && i < rows.getFilterList().size())
                    {
//                      selectionModel.setSelected(selectionModel.getLastSelectedObject(), false);
//                      selectionModel.setSelected(rows.getFilterList().get(i), true);
//                      SelectionChangeEvent.fire(selectionModel);
                        System.out.println("firing native event space");
                        DomEvent.fireNativeEvent(Document.get().createKeyUpEvent(false, false, false, false, 32), table);
                    }
                }
                else if(event.getNativeEvent().getKeyCode() == 38)
                {
                    // up is pressed
                    int i = rows.getFilterList().indexOf(selectionModel.getLastSelectedObject())-1;
                    if(i >= 0 && i < rows.getFilterList().size())
                    {
//                      selectionModel.setSelected(selectionModel.getLastSelectedObject(), false);
//                      selectionModel.setSelected(rows.getFilterList().get(i), true);
//                      SelectionChangeEvent.fire(selectionModel);
                        System.out.println("firing native event space");
                        DomEvent.fireNativeEvent(Document.get().createKeyUpEvent(false, false, false, false, 32), table);
                    }
                }
            }

        }, KeyUpEvent.getType());

32 はおそらくスペースの NativeEvent であり、私のコンソールは次のように出力します。

40
firing native event space
32

そのため、イベント タイプ 32 がオブジェクト テーブルに対して呼び出されていると仮定します。

オブジェクトが選択されているかどうかを確認します。画面の右側には、セル テーブルにすべての情報が表示されていないため、リストから追加情報が引き出されているためです。UP と DOWN を押すと RHS 情報が変更され、SPACE を押して情報の変更を促す必要がなくなります。

4

1 に答える 1

0

理想的には、選択の内部を突くでしょう。具体的にDefaultKeyboardSelectionHandlerは、 はキーボード ナビゲーションの既定の実装であり、DefaultSelectionEventManagerはスペースバー/クリックを使用した選択アクションの既定の実装です (どちらもCellPreviewEvent.Handlerです)。

SelectionModelいずれにせよ、 を使用してキーボード選択を強制的に基になるものにバインドすることができますsetKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION)。ユースケースには問題ないはずです。CellListショーケース サンプルの場合とほとんど同じです(選択 API はセル ウィジェット間で同じです)。

于 2013-06-07T21:37:04.920 に答える