0

我最近使用以下代码使用 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() 不显示任何内容以及为什么我每添加一个空白行就会得到一个额外的空白行吗?

4

3 回答 3

2

您不应该在代码中实例化 FlexTable - GWT 会为您执行此操作。一旦你创建了new FlexTable一个新对象,而不是你的小部件中包含的那个。在您发布的代码中,您有一个变量被调用flextable,另一个被调用flexTable- 很容易想象会发生一些混乱。

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

于 2012-01-04T18:28:57.993 回答
0

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

flexTable.setWidget(0, 0, new Label("Label One"));

这是第二个问题的答案。

这是有问题的代码行:

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

它应该是行、列、行跨度,我把它弄混了,所以它添加了空白行。

于 2012-01-05T17:00:48.393 回答
0

目前,FlexTable 使用元素 td 的过时元素属性对齐宽度高度等。从 HTML5 开始,这些不再受支持。GWT 应该改变 FlexTable 和其他覆盖 HTMLTable 的类以使用 CSS 而不是这些非常旧的元素属性!

于 2014-04-06T09:10:00.963 回答