我最近使用此代码使用GWT 2.4创建了一个flextable:
@uiBinder Flextable flextable;
在构造函数中,我在执行
后调用setupFlexTable() initWidget(uiBinder.createAndBindUi(this));
然后实例化flexTable。我错过了那一部分。使用setText()可以工作。
//Header row
private void setupFlexTable() {
flexTable.setText(0, 0, "Label One");
flexTable.setText(0, 1, "Label Two");
}
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():
@Override
public void setRowData(Data data) {
int rowCount = flexTable.getRowCount() + 1;
flexTable.setWidget((rowCount), 0, new Label(data.getDataName()));
flexTable.getFlexCellFormatter().setRowSpan(rowCount, 0, 2);
flexTable.setWidget((rowCount), 1, new Label(data.getData()));
flexTable.getFlexCellFormatter().setRowSpan(rowCount, 1, 2);
}
另外,当我使用flexTable.setText(“Label One”)时;等...它显示,但是当我使用setWidget()时,它不会?
另一个问题是我需要让这个表与它上面的文件列表保持同步,但是使用Firebug我看到如果我动态地向表中添加两行,它会显示rowCount为4吗?当我尝试删除一行并且它到达其中一个空白行时,这会抛出索引超出范围错误。
作为一种解决方法,我使用此代码来查找我需要删除的行,并避免出现空白行的问题(显然,表中只插入了两行空白行。)
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;
}
}
所以任何人都可以解释为什么setWidget()不会显示任何内容以及为什么我为每个添加的内容添加一个额外的空白行?
答案 0 :(得分:2)
您不应在代码中实例化FlexTable - GWT会为您执行此操作。制作new FlexTable
之后,您正在处理新对象,而不是小部件中包含的对象。在您发布的代码中,您有一个名为flextable
的变量和另一个名为flexTable
的变量 - 很容易想象会发生一些混乱。
我认为一旦你正确设置了这个问题,你的其他问题就会变得更加清晰。
答案 1 :(得分:0)
第一次我得到了行,列,小部件设置错误。愚蠢的语法问题。这是第一期的正确代码。
flexTable.setWidget(0, 0, new Label("Label One"));
以下是第二个问题的答案。
这是令人讨厌的代码行:
flexTable.getFlexCellFormatter().setRowSpan(rowCount, 0, 2);
它应该是行,列,rowspan,我混淆了,所以它添加了空行。
答案 2 :(得分:0)
目前,FlexTable使用元素td的antiquate元素属性对齐宽度高度等。 从HTML5开始,不再支持这些。 GWT应该改变FlexTable和覆盖HTMLTable的其他类来使用CSS而不是这些非常古老的元素属性!