2012-01-04 68 views
0

我最近创建使用GWT 2.4使用此代码flextable:与GWT 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

它看起来像你的代码片段缺少上下文 - 你是否使本地变量隐藏你的成员变量?你的代码中是否指'@ UiField'? – 2012-01-04 18:25:22

+0

我清理了一下,看看为什么我得到一个空flexTable,呃!这仍然不能解释空的空白行或为什么setWidget()不显示任何东西。 – 2012-01-04 18:39:54

+0

你能告诉我你是如何调用'setWidget'吗? – 2012-01-04 19:23:20

回答

2

你不应该在代码中实例化FlexTable-- GWT会为你做这件事。一旦你做出了new FlexTable你正在研究一个新的对象,而不是你的小部件中包含的一个。在您发布的代码中,您有一个名为flextable的变量,另一个名为flexTable - 很容易想象会发生一些混淆。

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

+0

你是对的,一旦我通过了uiBinder设置,语法问题就变得不言自明。谢谢! – 2012-01-05 17:11:41

0

我得到了行,列,小部件安装错误的第一次。愚蠢的语法问题。这是第一个问题的正确代码。

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

这是第二个问题的答案。

这是问题的代码行:

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

它应该是行,列,行跨度和我有它混淆了,所以它被添加空行。

0

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