2013-01-16 102 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); 
    } 
}});