0

您好,我有一个 CellTable,当我在键盘上按 Enter 或单击鼠标时,我想在单元格中选择一个元素。

问题是当我按下键时没有任何反应

这是我的代码,可以在 celltable 上启用输入键功能

 CellTable<Value> table = new CellTable<Value>();

    public void onCellPreview(CellPreviewEvent<Value> event) {
                    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) { // operation}

这也是鼠标点击的功能

.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
                        public void onSelectionChange(SelectionChangeEvent event) {

我的问题是,在键盘上按“enter”一开始不会运行,但是当我选择它然后按 enter 时会运行。

请帮忙。

4

4 回答 4

0

这很简单。

当您按“输入”时,您的计算机上会引发一个事件,您的浏览器也是如此。

该事件被传播到“ACTIVE”元素。也就是说,如果您有一个打开的浏览器和控制台,并且活动窗口(焦点窗口)在前面,那么如果您按“输入”并且 cmd 控制台将更改一行,则浏览器上不会发生任何事情。

同样的事情也发生在 webApp 上。当某物具有焦点时,只有这样它才能对点击/按键事件做某事。

例如:打开一个 web 邮件,如 hotmail/gmail 等。单击页面内的任意位置(不是文本框)。按 Enter(没有任何反应)。在文本框(用户名或密码)内单击。按 Enter。注意发生了一些事情。为什么?因为“了解事件”的对象现在已聚焦(活动)。

如果您希望它发生在视图的加载上,那么您可以明确地将焦点设置在加载时的项目上(尽管这不会达到您想要的效果)。

于 2013-01-17T13:00:29.873 回答
0

1-您不应该首先禁用keyboardSelectionPolicy。

2-您应该将此块添加到构造函数或 onLoad 方法:

table.addCellPreviewHandler(new CellPreviewEvent.Handler<GuiltyAccusationInfoDto>() {
@Override
public void onCellPreview(CellPreviewEvent<GuiltyAccusationInfoDto> event) {
    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_UP || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_DOWN
            || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_LEFT || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_RIGHT
            || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_PAGEUP || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_PAGEDOWN) {
        selectionModel.setSelected(listOfData.get(table.getKeyboardSelectedRow()), true);
    }
}});
于 2014-05-11T09:58:52.850 回答
0

覆盖onBrowserEvent中的 ID 列CellTable,检查是否按下了 ENTER:

    Column<T, Boolean> idCol = new Column<T, Boolean>(new CheckboxCell()) {
        @Override
        public Boolean getValue(T obj) {
            return selectionModel.isSelected(item);
        }

        @Override
        public void onBrowserEvent(Context context, Element elem, T object, NativeEvent event) {
            if (event.getKeyCode() == KeyCodes.KEY_ENTER) {
                selectionModel.setSelected(object, !selectionModel.isSelected(item));
                return;
            }
            super.onBrowserEvent(context, elem, object, event);
        }
    };
于 2013-01-21T11:20:44.783 回答
0

CellPreviewEvent 为您提供在单元格上触发的任何事件。除非您选择一个单元格,否则它不会被触发。所以首先你需要在按下回车之前通过键盘导航或鼠标选择一个单元格

于 2013-01-17T05:12:10.197 回答