2010-04-27 4 views
3

Я использую TabLayoutPanel в приложении GWT, прикрепленном к RootLayoutPanel страницы.TabLayoutPanel с прокруткой

Внутри каждой вкладки у меня есть ScrollPanel, который используется для отображения FlexTable.

Возможно ли, что TabLayoutPanel будет расти вертикально, чтобы пользователь мог прокручивать всю страницу с помощью полосы прокрутки браузера, вместо использования внутренней ScrollPanel?

ответ

1

Просто добавьте новый стиль в TabLayoutPanel:

this.addStyleName("tab-style-content"); 

и определить в вашем CSS, как:

.tab-style-content .gwt-TabLayoutPanelContent 
{ 
overflow: auto;  
} 

Таким образом, свойство overflow будет переписан в GWT-TabLayoutPanelContent и скроллинга будет отображаться автоматически.

0

Если вы сделаете TabLayoutPanel больше, чем панель root, вы получите полосу прокрутки браузера.

+0

Я удалил ScrollPanel, добавив FlexTable непосредственно в TabLayoutPanel. Однако, поскольку FlexTable растет с добавленными к нему новыми элементами, высота TabLayoutPanel не изменяется. Должен ли я вызвать конкретный метод для компоновки панели снова? – muriloq

-1

Если я хочу достичь чего-то подобного, я всегда кладу TabLayoutPanel в SimplePanel и добавляю SimplePanel к RootPanel. Я думаю, это не лучший способ, но он работает.

public void onModuleLoad() { 
    //Create TabPanel 
    TabPanel tp = new TabPanel(); 
    tp.add(new HTML("Foo"), "foo"); 
    tp.add(new HTML("Bar"), "bar"); 
    tp.add(new HTML("Baz"), "baz"); 
    tp.selectTab(1); 
    // Create SimplePanel and add TabPanel 
    SimplePanel sp =new SimplePanel(); 
    sp.add(tp); 
    // Add SimplePanel to the root panel. 
    RootPanel.get().add(sp); 
} 
+0

Это не сработало, возможно потому, что я использую TabLayoutPanel, введенный в GWT 2.0, а не TabPanel. Вот тема, обсуждающая ту же проблему: http://www.coderanch.com/t/493012/Google-Web-Toolkit/Application-Frameworks/TabLayoutPanel-auto-height-grow-gwt – muriloq

+0

Почему бы не использовать TabPanel вместо этого? Разве это не единственное преимущество * LayoutPanels, что они автоматически привязаны к RootPanel? –

+0

'TabPanel' не будет работать в режиме« Стандарты », только в режиме« Quirks ». Таким образом, вы не можете смешивать 'TabPanel' с' FlowPanel', вы должны использовать 'TabLayoutPanel', который, по-видимому, искалечен в отношении того, как он обрабатывает автоматическую калибровку на уровне просмотра. –

2

Короткий ответ: это невозможно с помощью LayoutPanel's. Причина: LayoutPanel специфичны для приложений, которые должны заполнять клиентскую область браузера, или, другими словами, часть, которая видима пользователем. Одной из проблем с браузерами является наличие виджета, который имеет точно высоту видимой области, а также автоматически изменяется при изменении размера окна браузера. Это одна из проблем, которую решают LayoutPanels.

Если вы хотите использовать панель прокрутки браузера и иметь возможность создавать страницы дольше, чем видимая область, используйте «обычные» панели.

BTW только FYI, вы знаете, что FlexTable работает медленно и, если возможно, лучше использует Grid.