2012-02-13 136 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