Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带筛选器的GWT CellTable标题列不接受空格(keycode=32)_Gwt_Gwt Celltable - Fatal编程技术网

带筛选器的GWT CellTable标题列不接受空格(keycode=32)

带筛选器的GWT CellTable标题列不接受空格(keycode=32),gwt,gwt-celltable,Gwt,Gwt Celltable,我已经创建了一个自定义CellTable头,如本线程中所述: 为了解决焦点问题,我使用了change事件而不是keyup事件来触发过滤,因此现在只有当过滤框失去焦点或按下Enter键时,才会触发过滤 我遇到的唯一问题是筛选器框不接受空格(keycode=32)。 有人经历过这种情况吗 KeyUpEvent的对象具有类中的方法getNativeEvent() 使用它,您应该没有任何问题: if (event.getNativeEvent().getKeyCode() == 32) {

我已经创建了一个自定义CellTable头,如本线程中所述:

为了解决焦点问题,我使用了change事件而不是keyup事件来触发过滤,因此现在只有当过滤框失去焦点或按下Enter键时,才会触发过滤

我遇到的唯一问题是筛选器框不接受空格(keycode=32)。
有人经历过这种情况吗

KeyUpEvent的对象具有类中的方法
getNativeEvent()

使用它,您应该没有任何问题:

if (event.getNativeEvent().getKeyCode() == 32) { 
       // TODO
}  

可能是其他地方的原因。

我能够解决这个问题,正如Andrey指出的,在浏览器事件中,我有以下代码:

public void onBrowserEvent(Context context, Element parent, C value,
    NativeEvent event, ValueUpdater<C> valueUpdater) {
if (value == null) return;

String eventType = event.getType();

GWT.log(eventType);

super.onBrowserEvent(context, parent, value, event, valueUpdater);

InputElement input = getInputElement(parent);

if ("change".equals(eventType)) {
    ((HeaderFilterDto) value).setFilterValue(input.getValue());
    if (valueUpdater != null) valueUpdater.update(value);
} else if ("keyup".equals(eventType) && event.getKeyCode() == 32) {
    insertSpaceToCursorPosition(input);
}
};

insertSpaceToCursorPosition中的方法是从TextBoxImpl.class的ValueBoxBase实现中提取出来的。

我发现AbstractHasData类是CellTable的父类之一,它使用空格、HOME、END、ARROW UP和ARROW DOWN进行表导航,这将防止这些键在单元格上执行其默认功能

只有当CelliEdit为TRUE时,键盘导航才会被抑制,而只有当表格主体上的单元格处于焦点且处于编辑模式时,才会发生这种情况

不幸的是,由于CellTable最初不支持标头上的输入框,因此也不支持标头上的CelliEdit

作为一种解决方法,我在自己的CellTable类扩展中创建了一个私有字段HeaderIsDiting,默认情况下设置为FALSE。然后我重写了onBrowserEvent2方法,当过滤器输入框处于焦点时,将headerIsEditing设置为TRUE,当同一框发生模糊事件时,将其设置为FALSE

然后我覆盖了ISKeyboardNavigation,如下所示:

@Override
protected boolean isKeyboardNavigationSuppressed() {
    return super.isKeyboardNavigationSuppressed() || headerIsEditing;
}

这样,当CelliEdit为TRUE或headerIsEditing为TRUE时,键盘导航被抑制

我解决了这个问题,修复了传递给
单元格表的
KeyProvider


如果您的
KeyProvider
是基于空字段实现的,而
com.google.gwt.cell.client.AbstractInputCell正在编辑
返回
false
,然后将
空格键用作导航单元格,则可能会出现此问题。

感谢Andrey的回复,是的,我曾在onBrowserEvent上尝试过,但我只能执行类似getinputElement.setvalue(getinputElement.getValue()+“”)的操作,这只是在最后一个文本上追加空格,但情况并非总是如此,例如,我想在光标所在的位置追加空格,不幸的是,我没有光标位置,这只在TextBox小部件中可用。有没有办法获取单元格中的光标位置?不幸的是,单元格小部件没有实现方法
setFocus()
。也许可以通过使用
selectionModel.setSelection()
并从当前范围中选择第一项来实现。
@Override
protected boolean isKeyboardNavigationSuppressed() {
    return super.isKeyboardNavigationSuppressed() || headerIsEditing;
}