在GWT中,如何在celltable的标题顶部添加一行?

在GWT中,如何在celltable的标题顶部添加一行?,gwt,header,header-files,celltable,gwtquery,Gwt,Header,Header Files,Celltable,Gwtquery,这很有趣,我们如何在GWT中的celltable头的顶部添加一行 好的,比如说,GWT头只支持排序,但我还想对每个列执行其他操作(例如筛选、隐藏等) 所以我想在celltable的标题顶部添加一行。行上有r多个按钮,每个按钮对应一列。当用户点击一个按钮,然后他们可以做其他事情,如过滤或隐藏 例如: 按钮1-按钮2-按钮3 校长1-校长2-校长3 第11单元-第12单元-第13单元 21号牢房-22号牢房-23号牢房 更多单元格…嗯,几乎不可能在标题顶部添加一行,这是单元格表之外的。 但是,您所说

这很有趣,我们如何在GWT中的celltable头的顶部添加一行

好的,比如说,GWT头只支持排序,但我还想对每个列执行其他操作(例如筛选、隐藏等)

所以我想在celltable的标题顶部添加一行。行上有r多个按钮,每个按钮对应一列。当用户点击一个按钮,然后他们可以做其他事情,如过滤或隐藏

例如:

按钮1-按钮2-按钮3

校长1-校长2-校长3

第11单元-第12单元-第13单元

21号牢房-22号牢房-23号牢房


更多单元格…

嗯,几乎不可能在标题顶部添加一行,这是
单元格表之外的。

但是,您所说的功能可以通过添加一个带有
零填充的horizantalpanel
并将
按钮添加到该面板中来实现(显然,按钮的宽度应该与列宽相同,并且没有css)

单击每个按钮,您就可以在
celltable上执行操作或排序。


免责声明:这是我可能的解决方案。

使用GWT的唯一方法是扩展
CellTable
实现,并在
CellTable
创建其标头的部分创建自己的黑客代码。此外,你必须考虑添加许多方法来添加按钮、处理程序等。我以前处理过这个问题,这是一个非常繁琐的任务。 但是一旦创建了表,您就可以选择修改
DOM
。有很多方法可以做到这一点,但我知道更简单的方法是使用gwtquery,又称gquery

在您的情况下,我将使用如下代码:

//导入gquery内容
导入静态com.google.gwt.query.client.GQuery.*;
//创建表并添加其列
最终单元格表单元格表=。。。
[...] 
//延迟直到表被完全呈现,我使用gquery Delay()是因为
//但您也可以使用调度程序或计时器
$(celltable).delay(0,新函数(){
公共空间f(){
//现在我们在每个标题中添加一个div,您可以添加任何html
$(“th”,单元格表)。前置($(“”);
//gquery的小部件插件能够提升某些dom元素
//像div/th/…等进入HTMLPanel
GQuery panels=$(“.mypanel”,celltable).as(Widgets.panel();
//gquery可以返回与一组元素相关联的小部件的排序列表
List=panels.widgets(HTMLPanel.class);
//现在,您可以将任何gwt小部件添加到面板中
对于(int i=0;i
下面是生成上述代码的屏幕截图:

这种方法意味着您必须导入到您的项目中,但老实说,我不会想象我在没有它的情况下从事GWT项目:-)

当设计人员要求增强gwt小部件,而您不想强制执行调整(大多数情况下意味着复杂的编码和调查)来做非常简单的事情(如修改小部件生成的dom)时,Gquery非常有用


此外,Gquery还提供了许多您可以利用的功能,比如简单的ajax语法、承诺、插件、使用js方法和属性而不编写jsni等等。

自GWT 2.5以来,应该可以提供自定义
HeaderBuilder
或扩展/来解决您的问题。
你可以看看这个陈列柜。 它定义了一个自定义的
CellTableBuilder
,但同样的原则也应适用于
HeaderBuilder
接口