你好我有一个CellTable当我按下键盘上的Enter键或单击鼠标时,我想在单元格中选择一个元素。
问题是,当我按下键时没有任何事情发生
这是我的代码,可以在小区表
上启用回车键功能 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) {
我的问题是按键盘上的“输入”不会先运行,而是在我选择它然后按回车键时运行。
请帮忙。
答案 0 :(得分:0)
CellPreviewEvent为您提供在单元格上触发的任何事件。除非您选择一个单元格,否则它不会被触发。因此,首先您需要在按Enter键之前通过键盘导航或鼠标选择一个单元格
答案 1 :(得分:0)
这很简单。
当您按“Enter”时,您的计算机上会出现一个事件,因此它适用于您的浏览器。
事件传播到“ACTIVE”元素。也就是说,如果您有一个打开的浏览器和控制台,并且活动窗口(聚焦的窗口)是预先显示的,如果您按“输入”并且cmd控制台将更改一行,则浏览器上不会发生任何事情。
同样的事情发生在webApp上。什么东西有 FOCUS 然后才能用点击/按键事件做点什么。
例如:打开网页邮件,例如hotmail / gmail等。点击页面内的任何位置(不是文本框)。按Enter键(没有任何反应)。在文本框中单击(用户名或密码)。按Enter键。注意事情发生了。为什么?因为理解事件的对象现在已经集中(活动)。
如果你希望它在视图的加载时发生,那么你可以在加载时明确设置焦点(虽然这不会达到你想要的效果)。
答案 2 :(得分: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);
}
};
答案 3 :(得分: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);
}
}});