DockLayoutPanel.getOffsetHeight return zero even after calling forceLayout()

96 views
Skip to first unread message

tong123123

unread,
Mar 28, 2012, 4:08:00 AM3/28/12
to google-we...@googlegroups.com
there is a simplePanel and the simplePanel add a DockLayoutPanel called AdvancedSearchPanel.
in the AdvancedSearchPanel constructor, the width is set to 100% and height to 1800px.

then there is a menu item and when it is clicked,
I try to add the AdvancedSearchLogsPanel() to simplePanel and then called
advancedSearchLogsPanel.forceLayout()
before calling
advancedSearchLogsPanel.getOffsetWidth() and advancedSearchLogsPanel.getOffsetHeight()
but both return zero!!

what is the problem come from?

tong123123

unread,
Mar 28, 2012, 6:46:46 AM3/28/12
to google-we...@googlegroups.com
the code is attached as follow:

public class ALS implements EntryPoint {

	ScrollPanel basePanel = new ScrollPanel();
	DockLayoutPanel baseDockLayoutPanel = new DockLayoutPanel(Unit.PX);	
	SimplePanel simpleContentPanel = new SimplePanel();

	public void onModuleLoad() {			
		RootLayoutPanel rootPanel = RootLayoutPanel.get();		
		rootPanel.add(basePanel);
		basePanel.add(baseDockLayoutPanel);
		baseDockLayoutPanel.setSize("1200", "800");		
		baseDockLayoutPanel.addNorth(CommonPanel.getHeaderPanel(), 20);
		baseDockLayoutPanel.addSouth(CommonPanel.getFooterPanel(), 40);		
		FlowPanel leftSidePanel = CommonPanel.getLeftSidePanel();
		FlowPanel menuPanel = new FlowPanel();
		menuPanel.setWidth("150px");
		menuPanel.addStyleName("menu");
		menuPanel.add(buildTree());		
		leftSidePanel.add(menuPanel);
		baseDockLayoutPanel.addWest(leftSidePanel, 220);		
		baseDockLayoutPanel.add(simpleContentPanel);		
		baseDockLayoutPanel.setSize("1024", "800");		
		
	}


	Tree buildTree(){
		Tree treeMenu = new Tree();	
			
		
		final TreeItem searchLogs = new TreeItem("Search Logs");		
		treeMenu.addItem(searchLogs);
		searchLogs.setState(true);		
		
		treeMenu.addSelectionHandler(new SelectionHandler<TreeItem>(){

			@Override
			public void onSelection(SelectionEvent<TreeItem> event) {
				if (event.getSelectedItem().equals(advancedSearchLogs)){
					//System.out.println(splitLayoutPanel.getWidgetCount());
					simpleContentPanel.remove(simpleContentPanel.getWidget());
					simpleContentPanel.add(new AdvancedSearchLogsPanel());					
					advancedSearchLogsPanel.forceLayout();
					baseDockLayoutPanel.forceLayout();	
					
					int width = advancedSearchLogsPanel.getOffsetWidth() + 220;
					int height = advancedSearchLogsPanel.getOffsetHeight()+ 60;
					// Problem here, getOffSetheight() return zero!!
					// AdvancedSearchLogsPanel is a docklayoutPanel
					baseDockLayoutPanel.setSize(String.valueOf(width), String.valueOf(height));
				}
			}});
		return treeMenu;
	}
}

skippy

unread,
Mar 28, 2012, 9:27:36 AM3/28/12
to Google Web Toolkit
I have had this problem before.
The widget needs to be visible before it knows the size atributes.

Here is some code that might help you. you need to schedule a
deferred commad. Do some searched to understand object.

Hope this helps!

public static void adjustHeight(final DockLayoutPanel topPanel,
final SimplePanel bodyPanel, final DockLayoutPanel outerPanel, final
boolean isIpad)
{
Scheduler.get().scheduleDeferred(new
Scheduler.ScheduledCommand()
{
public void execute()
{
int width = Window.getClientWidth() - 7;
int height = Window.getClientHeight() - 7;
if(isIpad)
{
width = width - 40;
> > what is the problem come from?- Hide quoted text -
>
> - Show quoted text -
Reply all
Reply to author
Forward
0 new messages