GWT单元格表高亮显示的行

GWT单元格表高亮显示的行,gwt,keypress,celltable,dom-events,Gwt,Keypress,Celltable,Dom Events,因此,我有一个单元格表,其中的点击事件选择模型运行良好。 我后来发现,您可以按向上和向下箭头来更改突出显示的行,但糟糕的是,您必须按空格才能真正调用SelectionChangeEvent。 我试图通过追踪上下事件和发射太空事件来欺骗自己。遗憾的是,它不起作用:( 这是我的代码,任何帮助都将不胜感激 table.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); table.sinkEvents

因此,我有一个单元格表,其中的点击事件选择模型运行良好。 我后来发现,您可以按向上和向下箭头来更改突出显示的行,但糟糕的是,您必须按空格才能真正调用SelectionChangeEvent。 我试图通过追踪上下事件和发射太空事件来欺骗自己。遗憾的是,它不起作用:( 这是我的代码,任何帮助都将不胜感激

        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


我检查对象是否被选中,因为在屏幕的右侧,我有从列表中拉出的附加信息,因为单元格表不显示所有信息。我希望这样,当我上下按RHS信息更改时,我不必按空格来提示信息更改,理想情况下,您可以点击具体来说,
DefaultKeyboardSelectionHandler
是键盘导航的默认实现,
DefaultSelectionEventManager
是使用空格键/点击的选择操作的默认实现(它们都是
CellPreviewEvent.Handler
s)


无论如何,您可以通过使用
setKeyboardSelectionPolicy(KeyboardSelectionPolicy.bound\u to\u selection)
强制将键盘选择绑定到底层的
SelectionModel
。这对于您的用例来说应该是很好的。就像对所做的那样(选择API在单元小部件之间是相同的).

我是根据记忆说话的,但我想我在某种程度上使用了方法表。setKeyboardSelectedRow(row,stealFocus)如果我有时间,我会自己测试,但值得一试。基本上如果你捕获了KEY\u UP事件row=actualRow-1(反之亦然)。祝你好运!谢谢setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION)现在对我来说很好。我需要在某个时候看看如何编写自己的键盘选择处理程序。
40
firing native event space
32