繁体   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