PDA

View Full Version : To Help: Putting a panel inside a tabpanel with scrollbar support



fulvius
23 Jan 2009, 2:32 AM
Problem: Need a severals TabPanels with scrollbar support and refresh when the browser window was resized.

My solution:



public class Main implements EntryPoint {

public void onModuleLoad() {
Viewport viewport = new Viewport();

RootPanel.get().add(viewport);
viewport.setLayout(new FitLayout());

TabPanel tabPanel = new TabPanel() {

@Override
protected void onResize(int width, int height) {
super.onResize(width, height);

for (TabItem t : this.getItems()) {
int h = t.getTabPanel().getHeight() - t.getHeader().getOffsetHeight() - 13;
for (Component c : t.getItems()) {
c.setHeight(h + "px");
}

}
}

};

viewport.setLayout(new FitLayout());

tabPanel.setStyleAttribute("border", "solid 1px yellow");

for (int i = 1; i <= 10; i++) {
final TabItem tabItem = new TabItem("<center>Tab " + i + " </center>");

tabItem.setStyleAttribute("border", "solid 1px red");
tabItem.setLayout(new FitLayout());

ContentPanel contentPanel = new ContentPanel() {

@Override
protected void onRender(Element parent, int pos) {
int h = tabItem.getTabPanel().getHeight() - tabItem.getHeader().getOffsetHeight() - 13;
this.setHeight(h);
super.onRender(parent, pos);
}
};
contentPanel.addText(generateDummyText());
contentPanel.setHeaderVisible(false);

contentPanel.setScrollMode(Scroll.AUTO);

tabItem.add(contentPanel);

tabItem.setClosable(true);
tabPanel.add(tabItem);

}

tabPanel.setAnimScroll(true);
tabPanel.setAutoWidth(true);
tabPanel.setTabScroll(true);
tabPanel.setMinTabWidth(115);
tabPanel.setResizeTabs(true);
tabPanel.setAutoHeight(true);
tabPanel.setScrollIncrement(301);
tabPanel.setScrollDuration(50);

viewport.add(tabPanel);

}

private String generateDummyText() {
int r = (int) (Math.random() * 5);
String result = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, "
+ "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "
+ "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris "
+ "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in "
+ "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla "
+ "pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa "
+ "qui officia deserunt mollit anim id est laborum. ";
for (int i = 0; i < r; i++) {
result += result;
}
return result;
}
}







Anybody have a more elegant solution? ~o)