2012-01-04 97 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,而不是這些非常舊的元素屬性!