2011-11-13 37 views
0

有人可以幫助我。我是新來的gwt,也許這很簡單。但我似乎無法想出解決辦法... 我在celltable創建一個2行按鈕,每一個用這種方法:GWT 2 ButtonCell在一行添加事件

protected void addButtonColumn(String header, final IHasValue<Row, Button> hasVal){ 
    Column<Row, String> column = new Column<Row, String>(new TextButtonCell()) { 
     @Override 
     public String getValue(Row object) { 
      return ((Button)hasVal.getValue(object)).getText(); 
     } 
    }; 
    column.setFieldUpdater(new FieldUpdater<Row, String>() { 
     @Override 
     public void update(int index, Row object, String value) { 
      ((Button) hasVal.getValue(object)).click(); 
     } 
    }); 
    table.addColumn(column, header); 
} 

我希望每個按鈕不同的東西點擊時,但它不沒有工作。我知道我應該在setfieldupdater中做點什麼,但我不知道是什麼。

回答

1

您使用TextButtonCell來包含一個Button(即一個小部件)並沒有多大意義 - 讓單元可以訪問數據並使用ValueUpdater來觸發基於該數據的某種行爲直接?

單元格不是小部件 - 它們比小部件簡單得多。這主要意味着兩件事情:他們畫得更快,更笨。這兩件事情都是由於單個單元實例被用來以不同的方式繪製許多數據。如果你正在努力爲每個元素構建一個按鈕,那麼使用基於單元的小部件是沒有意義的 - 那麼你幾乎可以繪製所有的東西兩次,並且獲得兩個世界中最糟糕的一點(代碼很慢,這很難與之合作)。

不要使用附有ButtonClickHandler S,但其他一些抽象處理點擊,就像一個Command實例爲每一行,甚至更好,某種處理程序接受該行實例點擊。將FieldUpdater實例作爲參數傳入(或許在String而不是Button上使IHasValue泛型,因此模型不需要包裝小部件),甚至可能有意義。

(這可能不是直接回答你的問題,而是希望幫助闡明爲什麼我們使用細胞的功能有些輕,以及如何,它利用細胞的最佳寫代碼。)

+0

感謝。很有幫助。我想到了。 – Ehphan