2013-01-22 39 views
2

我想在GWT CellTable中獲取選定的行,當用戶向上或向下按下鍵時。在我的例子中,我有一個包含三列(ID,名稱,日期)的表格,並且我已經實現了處理click事件的代碼。當點擊一行時,我得到選定的對象。現在我想用箭頭鍵向上和向下移動表格的各行時執行相同的操作。如何使用GWT CellTable中的選定行來使用按鍵?

這是我的代碼:

// Create id column. 
    TextColumn<MyObject> idColumn = new TextColumn<MyObject>() 
    { 
     @Override 
     public String getValue(MyObject obj) 
     { 
      return String.valueOf(obj.getId()); 
     } 
    }; 
    // Create name column. 
    TextColumn<MyObject> nameColumn = new TextColumn<MyObject>() 
    { 
     @Override 
     public String getValue(MyObject obj) 
     { 
      return obj.getName(); 
     } 
    }; 
    // Create date column. 
    TextColumn<MyObject> dateColumn = new TextColumn<MyObject>() 
    { 
     @Override 
     public String getValue(MyObject obj) 
     { 
      return String.valueOf(obj.getDate()); 
     } 
    }; 

    // Create the CellTable element and add columns 
    CellTable<MyObject> table = new CellTable<MyObject>(); 
    table.addColumn(idColumn, "ID"); 
    table.addColumn(nameColumn, "Name"); 
    table.addColumn(dateColumn, "Date"); 

    // Create the selectioModel and the SelectionChangeEvent Handler 
    NoSelectionModel<MyObject> selectionModelMyObj = new NoSelectionModel<MyObject>(); 
    Handler tableHandler = new SelectionChangeEvent.Handler() 
    { 
     @Override 
     public void onSelectionChange(SelectionChangeEvent event) 
     { 
      MyObject clickedObj = selectionModelMyObj.getLastSelectedObject(); 
      Window.alert("Object selected: " + clickedObj); 
     } 
    }; 
    // Add the handler to the selection model 
    selectionModelMyObj.addSelectionChangeHandler(tableHandler); 
    // Add the selection model to the table 
    table.setSelectionModel(selectionModelMyObj); 

感謝所有。

回答

1

您需要將鍵盤選擇策略w.r.t理解爲GWT小部件和celltable。

正確的方法是隻允許使用按鍵「向上」和「向下」進行行導航以及使用按鍵「左」和「右」進行小區導航。行的選擇只能在「Space」或「Enter」鍵上單擊。

所有這些都已經提供了GWT單元格表。您可以查看源代碼和演示http://gwt.googleusercontent.com/samples/Showcase/Showcase.html#!CwCellTable

4

默認情況下,CellTable內的鍵盤導航只更新keyboard selected row。只有通過點擊輸入鍵該行纔會變爲選中

如果您希望選擇遵循鍵盤選擇,您可以將keyboard selection policy設置爲bound to selection。我不確定它如何與NoSelectionModel一起工作,但可能會更好用SingleSelectionModel

+0

感謝您的信息。我不知道CellTable是如何工作的。我將使用SingleSelectionModel而不是NoSelectionModel,它對我的​​程序更好。謝謝。 –

0

您可以用getKeyboardSelectedRow()方法獲取CellTable的行。這將返回通過鍵盤或鼠標選擇的行的int索引。

GWT的Javadoc CellTable: http://www.gwtproject.org/javadoc/latest/

公衆詮釋getKeyboardSelectedRow()

,也都是通過鍵盤,相對於頁面開始索引當前所選行的索引。

這與SelectionModel中的選定行不同。鍵盤選定行是指用戶通過鍵盤或鼠標導航到的行。

返回:當前選定的行,或者-1,如果沒有選擇

相關問題