簡體   English   中英

GWT CellTable高亮顯示行

[英]GWT CellTable highlighted row

所以我有一個單元格表,其單擊事件選擇模型運行良好。 后來我發現您可以按UP和DOWN箭頭來更改突出顯示的行,但是可怕的是您必須按Space才能真正調用SelectionChangeEvent。 我試圖通過捕捉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信息會更改,而不必按空格鍵來提示信息更改

理想情況下,您應該戳入選擇內部。 具體來說, DefaultKeyboardSelectionHandler是鍵盤導航的默認實現,而DefaultSelectionEventManager是使用空格鍵/單擊(它們都是CellPreviewEvent.Handler )的選擇動作的默認實現。

無論如何,您可以使用setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION)強制將鍵盤選擇綁定到基礎的SelectionModel 對於您的用例來說應該沒問題。 就像對CellList展示示例所做的操作一樣(跨單元小部件的選擇API相同)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM