带筛选器的GWT CellTable标题列不接受空格(keycode=32)
我已经创建了一个自定义CellTable头,如本线程中所述: 为了解决焦点问题,我使用了change事件而不是keyup事件来触发过滤,因此现在只有当过滤框失去焦点或按下Enter键时,才会触发过滤 我遇到的唯一问题是筛选器框不接受空格(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) {
有人经历过这种情况吗 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;
}