2012-02-13 88 views
1

在GWT中,我試圖使用網格中的按鈕來獲取FlexTable,以便單擊其中一個按鈕會導致發生某些事情。然而,當我看結果在瀏覽器中,我得到如下:GWT流表填充單元格

+-+-+ +-+ 
|a|b| |c| 
+-+-+ +-+ 
    |e|  
+-+-+-+-+-+ 
|d|h|i|f|g| 
+-+-+-+-+-+ 
    |j|  
    +-+  
    |k| 
    +-+ 

,而我要的是這樣的:

+-+---+---+ 
|a| b | c | 
+-+---+-+-+ 
| | e | | | 
| +-+-+ | | 
| |h|i|f|g| 
|d+-+-+ | | 
| | j | | | 
| +---+-+-+ 
| | k | 
+-+-------+ 

我試着用table.getFlexCellFormatter().setColSpan(row, col, span)作爲API的建議,但是這導致了上面的第一個結果。我應該如何繼續的任何想法?

@Stefan:我的代碼是

public MyPanel() { 
    Button b; 
    FlexTable ft = new FlexTable(); 
    ClickHandler click = new ClickHandler() { 
     @Override 
     public void onClick() { 
      // do something here with the button that was clicked 
     } 
    } 
    b = new Button("a"); 
    b.addClickHandler(click); 
    ft.setWidget(0, 0, b); 
    // do the same for button "b" at (0,1), "c" at (0,3), "d" at (1,0), "e" at (1,1), 
    // "f" at (1,3), "g" at (1,4), "h" at (2,1), "i" at (2,2), "j" at (3,1), "k" at (4,1) 
    ft.getFlexCellFormatter().setColSpan(0, 1, 2); 
    ft.getFlexCellFormatter().setColSpan(0, 3, 2); 
    ft.getFlexCellFormatter().setRowSpan(1, 0, 4); 
    ft.getFlexCellFormatter().setColSpan(1, 1, 2); 
    ft.getFlexCellFormatter().setRowSpan(1, 3, 3); 
    ft.getFlexCellFormatter().setRowSpan(1, 4, 3); 
    ft.getFlexCellFormatter().setColSpan(3, 1, 2); 
    ft.getFlexCellFormatter().setColSpan(4, 1, 4); 
} 
+0

您可以提供你的代碼? – Stefan 2012-02-13 16:33:53

回答

2

設置表格單元格的合併單元格和行跨度不改變相鄰小區指數,它只是塞到他們的出路。例如,爲了實現這個表:

+-+-+ 
|a|b| 
| |-+ 
|a|c| 
+-+-+ 

我們使用:

ft.setWidget(0, 0, a); 
ft.setWidget(0, 1, b); 
ft.setWidget(1, 0, c); // !!! 
ft.getFlexCellFormatter().setRowSpan(0,0,2); 

查看,控件c是屬於第一行第一個單元格。它可以幫助到這麼看,如果你考慮到將要生成的HTML:

<table> 
    <tr> 
    <td rolspan="2">a</td><td>b</td> 
    </tr><tr> 
    <td>c</td> 
    </tr> 
</table> 

調整你的指標,一切都應該排隊,你想要的方式來:

ft.setWidget(0, 0, a); 
ft.setWidget(0, 1, b); 
ft.setWidget(0, 2, c); 
ft.setWidget(1, 0, d); 
ft.setWidget(1, 1, e); 
ft.setWidget(1, 2, f); 
ft.setWidget(1, 3, g); 
ft.setWidget(2, 0, h); 
ft.setWidget(2, 1, i); 
ft.setWidget(3, 0, j); 
ft.setWidget(4, 0, k); 
ft.getFlexCellFormatter().setColSpan(0, 1, 2); 
ft.getFlexCellFormatter().setColSpan(0, 2, 2); 
ft.getFlexCellFormatter().setRowSpan(1, 0, 4); 
ft.getFlexCellFormatter().setColSpan(1, 1, 2); 
ft.getFlexCellFormatter().setRowSpan(1, 2, 3); 
ft.getFlexCellFormatter().setRowSpan(1, 3, 3); 
ft.getFlexCellFormatter().setColSpan(3, 0, 2); 
ft.getFlexCellFormatter().setColSpan(4, 0, 4); 
+0

雖然這部分解決了問題,但它並沒有解決按鈕擴展到**的問題**填滿了單元格。 – user1207177 2012-02-14 13:47:09

+0

如上所示,例如,我想讓「e」按鈕與「h」和「i」按鈕的組合一樣寬。 – user1207177 2012-02-14 14:09:48

+0

這是一個風格問題。將按鈕寬度和高度設置爲'100%',他們將完全填充它們的容器。 – 2012-02-14 15:29:38