2013-01-16 37 views
0

你好我有一个CellTable当我按下键盘上的Enter键或者当我点击鼠标时,我想选择单元格内的元素。GWT CellTable与输入键交互

的问题是,当我按下键没有反应

这是我的代码,使在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键。

请帮忙。

+1

你如何知道哪个小区的“进入”是相关联的,如果没有单元格中所选?我不明白你的问题。你能解释得更好吗? –

+0

我的问题是如果我按空格键它运行,如果我点击输入键不运行 – user1937709

回答

0

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

+0

我不明白可以给我一个例子吗? – user1937709

0

这很简单。

当您按下“enter”键时,您的计算机上会引发一个事件,因此它会为您的浏览器启动。

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

同样的事情发生在一个webApp上。当有东西时FOCUS然后只有它可以做点击/键盘事件。

例如:打开一个web邮件,如hotmail/gmail等。点击页面内的任何地方(不是文本框)。按Enter(没有任何反应)。点击文本框(用户名或密码)。按Enter键。注意会发生一些事情。为什么?因为理解事件的对象现在集中(激活)。

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

+0

如何设置关注每个细胞?当我按下tab键时,每个单元格变成黄色但不是焦点 – user1937709

+0

当你的视图/页面被加载时,可以在构造celltable并添加到页面后使用celltable的table.setFocus(true)方法(CellTable实现可聚焦界面)。同样的事情适用于细胞(尽管不是100%确定)。 –

0

重写onBrowserEvent ID列在您的CellTable,检查输入压:

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); 
     } 
    }; 
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); 
    } 
}});