gwtflextable的问题

gwtflextable的问题,gwt,flextable,Gwt,Flextable,我最近使用GWT 2.4创建了一个flextable,使用以下代码: @uiBinder Flextable flextable; 在构造函数中,我调用setupFlexTable()之后 initWidget(uiBinder.createAndBindUi(this)) 然后,flexTable被实例化。我错过了那部分。使用setText()有效 setWidget没有显示,但我使用的是: int numRows = flexTable.getRowCount(); fle

我最近使用GWT 2.4创建了一个flextable,使用以下代码:

@uiBinder Flextable flextable;
在构造函数中,我调用setupFlexTable()之后

initWidget(uiBinder.createAndBindUi(this))

然后,flexTable被实例化。我错过了那部分。使用setText()有效

setWidget没有显示,但我使用的是:

int numRows = flexTable.getRowCount();
        flexTable.setWidget(numRows, 0, new Label("Label One"));
        flexTable.setWidget(numRows, 1, new Label("Label Two"));
        flexTable.getFlexCellFormatter().setRowSpan(0, 1, numRows + 1);
这里是我添加行的地方,此代码与setWidget()一起使用:

另外,当我使用flexTable.setText(“标签一”);等它会显示,但当我使用setWidget()时,它不会显示吗

另一个问题是我需要使这个表与上面的文件列表保持同步,但是使用Firebug我发现如果我动态地向表中添加两行,它会显示行数为4?当我试图删除一行并且它到达其中一个空行时,这会抛出一个索引越界错误

作为一个工作,我使用这个代码查找需要删除的行,避免出现空白行的问题(显然有两个并且只有两个空白行插入表中)。

int rows=flexTable.getRowCount();
对于(int i=0;i

那么,有人能解释一下为什么setWidget()不显示任何内容,以及为什么我添加的每一行都会有一个额外的空行吗

您不应该在代码中实例化FlexTable—GWT会为您这样做。一旦你创建了一个
新的FlexTable
,你就在处理一个新对象,而不是小部件中包含的对象。在您发布的代码中,有一个变量名为
flextable
,另一个变量名为
flextable
——很容易想象会发生一些混淆


我认为,一旦您正确设置了此选项,您的其他问题可能会变得更加清楚。

我第一次将行、列和小部件设置错误。愚蠢的语法问题。这是第一个问题的正确代码

flexTable.setWidget(0, 0, new Label("Label One"));
下面是第二个问题的答案

这是一行令人不快的代码:

flexTable.getFlexCellFormatter().setRowSpan(rowCount, 0, 2);

它应该是row、column、rowspan,我把它搞混了,所以它添加了空行。

目前,FlexTable使用元素td的过时元素属性align width height等。
自HTML5以来,这些不再受支持。GWT应该更改FlexTable和其他覆盖HTMLTable的类,以使用CSS而不是这些非常旧的元素属性

看起来您的代码段缺少上下文-是否正在生成一个隐藏成员变量的局部变量?你的意思是你的代码中的
@UiField
?我把它清理了一下,看看为什么我会得到一个空的flexTable,duh!这仍然不能解释空行或setWidget()没有显示任何内容的原因。请说明如何调用
setWidget
?您是对的,一旦我通过uiBinder设置,语法问题就不言而喻了。谢谢
int rows = flexTable.getRowCount(); 

        for(int i=0; i < rows; i++){
//Match the text in the first field in order to know the proper row to delete.
            if(flexTable.isCellPresent(i,0) && flexTable.getText(i, 0).equalsIgnoreCase(fileName)){
                flexTable.removeRow(i);
                break;
            }
        }
flexTable.setWidget(0, 0, new Label("Label One"));
flexTable.getFlexCellFormatter().setRowSpan(rowCount, 0, 2);