所以我有一个点击事件选择模型工作正常的单元格表。后来我发现您可以按向上和向下箭头来更改突出显示的行,但可怕的是您必须按空格键才能真正调用 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 信息会发生变化,而我不必按 SPACE 来提示信息更改