使用 GWT 的唯一方法是扩展实现并在创建其标头CellTable
的部分创建您自己的黑客代码。CellTable
此外,您还必须考虑添加许多方法来添加按钮、处理程序等。我之前已经处理过这个问题,这是一项非常乏味的任务。
但是您可以选择DOM
在创建表后进行修改。有很多方法可以做到这一点,但我知道的更简单的方法是使用 gwtquery aka gquery。
在你的情况下,我会使用这样的代码:
// import gquery stuff
import static com.google.gwt.query.client.GQuery.*;
// Create your table and add its colums
final CellTable<MyObject> celltable = ...
[...]
// Delay until the table has been full rendered, I use gquery delay() because
// of its syntax but you could use Scheduler or Timer as well
$(celltable).delay(0, new Function(){
public void f() {
// Now we add a div to each header, you could add any html though
$("th", celltable).prepend($("<div class='mypanel' style='height: 40px'/>"));
// gquery's widget plugin is able to promote certain dom elements
// like div/th/... etc into HTMLpanels
GQuery panels = $(".mypanel", celltable).as(Widgets).panel();
// gquery can return a sorted list of widgets asociated with a set of elements
List<HTMLPanel> list = panels.widgets(HTMLPanel.class);
// Now you can add any gwt widget to your panels
for (int i = 0; i < list.size(); i++) {
list.get(i).add(new Button("Button: " + i));
}
}
});
这是生成上述代码的屏幕截图:
这种方法意味着您必须将gwtquery导入您的项目,但老实说,我不认为我在没有它的情况下从事 GWT 项目:-),
当设计人员要求增强 gwt-widgets 并且您不想强制执行调整(这通常意味着复杂的编码和调查)来执行非常简单的事情(例如修改小部件生成的 dom)时,Gquery 有很大帮助。
此外,Gquery 提供了很多可以利用的东西,比如简单的 ajax 语法、promise、插件、使用 js 方法和属性而无需编写 jsni 等。