2009-08-09 45 views
1

我想创建一个占据整个浏览器客户区的TabPanel,并在其内部放置一个可根据需要滚动的FlexTable。但是,我无法实现这一点。我已经试过:GWT:在全屏TabPanel中创建一个可滚动的FlexTable

public void onModuleLoad() { 
    TabPanel test = new TabPanel(); 
    test.setSize("100%", "100%"); 

    FlexTable flex = new FlexTable(); 
    for (int i = 0; i < 100; i++) 
     flex.setText(i, 0, "test " + i); 

    test.add(flex, "tab"); 
    flex.setStyleName("overflow-auto"); 

    test.selectTab(0); 
    RootPanel.get().add(test); 
    } 

凡溢出自动定义为:

.overflow-auto { 
    overflow: auto; 
} 

虽然标签面板,占地100%的宽度,它结束了扩展自己的高度,内部FlexTable,而不是迫使滚动条上。我怎样才能让tabpanel的客户区域独立于它的孩子的大小?

回答

0

问题是,当您将其设置为制表符子时,表格设置为100%宽度/高度。如果你这样做,溢出自动没有更多的含义,因为你允许弹性表是100%(的内容)。

溢出只适用于使用像素设置宽度/高度。

+0

我不这么认为。将高度设置为100%表示您希望它使用容器高度的100%,而不是100%自己的内容,就像100%宽度填充所有容器宽度一样。 – Toji 2009-11-23 20:25:21

3

您可能需要使用该选项卡内的ScrollPanel来获得所需的效果。 ScrollPanel是一个容器,只需要一个小部件,并根据需要在其上放置一个滚动条。我应该注意到,据我所知,ScrollPanel确实依赖于设置一个明确的大小,否则它会随着你放入的内容而愉快地扩展。

然而,一个警告:TabPanel内部的任何类型的可滚动面板都存在长期存在的缺陷。最后我看到它仍然是开放的。

http://code.google.com/p/google-web-toolkit/issues/detail?id=1343

我想你会在这里寻找解决的办法是把FlexTable到像一个VerticalPanel一些其它容器板(可能是SimplePanel就足够了),然后将其写入一个ScrollPanel最后将其推入TabPanel。

正如我所指出的,ScrollPanel将需要您手动管理它的高度。所以,如果你希望它保持在窗口的高度,这将涉及编写一些代码来检查浏览器的大小,并计算出ScrollPanel需要的高度。您需要将调整大小处理程序附加到窗口,以便捕捉大小和修复内容。

至少,这是避免浏览器滚动条的事情,因为我现在看到它。如果我错了,请让我知道,因为我有代码删除...

+0

是的,这是真的 - “取决于设置一个明确的大小,否则它会随着你放入的内容而愉快地扩展” – KillBill 2013-05-04 11:59:38

1

什么工作对我来说是类似于写什么bikesandcode:

  1. 创建FlexPanel
  2. 创建ScrollPanel并添加FlexPanel它
  3. 设置ScrollPanel的需要尺寸(使用绝对CSS单位)
  4. 创建SimplePanel并添加ScrollPanel它
  5. 的SimplePanel添加到标签面板
+0

为什么你需要将ScrollPanel包装在SimplePanel中,而不是在TabPanel中添加ScrollPanel ? – KillBill 2013-05-04 12:01:42

0

我使用Horizo​​ntalPanel(由gxt提供)作为FlexTable的父项并使用setAutoHeight(true)方法。这工作正常。