GWT CellTable突出显示了行

时间:2013-06-07 15:42:29

标签: gwt keypress celltable dom-events

所以我有一个单击事件选择模型的单元格表工作正常。 我后来发现你可以按向上和向下箭头来改变突出显示的行,但可怕的是你必须按空格才能实际调用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。

我检查对象是否被选中,因为在屏幕的右侧我有从列表中提取的附加信息,因为单元格表没有显示所有信息。我想要它,所以当我按下向上和向下按RHS信息更改时我不必按SPACE来提示信息更改

1 个答案:

答案 0 :(得分:0)

理想情况下,你会选择内部选择。具体来说,DefaultKeyboardSelectionHandler是键盘导航的默认实现,而DefaultSelectionEventManager是使用空格键/点击次数的选择操作的默认实现(它们都是CellPreviewEvent.Handler s。)。

无论如何,您可以使用SelectionModel强制键盘选择绑定到基础setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION)。你的用例应该没问题。非常类似于CellList showcase sample所做的(选择API在单元格小部件中是相同的)。