Cputerace
31 Mar 2009, 11:08 AM
We have a number of ContentPanels that serve various purposes. We allow the user to change between a few different layouts of those panels, all implemented with BorderLayout so the user can drag and resize individual ContentPanels. The draggable resize split bars between the panels work the first time the panels are added to the viewport, however they do not work when you remove the panels and re-add them with a different layout.
In the below code, there are 3 layouts each accessible via their own getLayoutx(), which is passed into setLayout(). There are 3 buttons in panel1 that can swap you between layouts. In onModuleLoad, you can change the initially selected layout and see that they all work initially, however as soon as you swap to a different layout (or re-load the same current layout), the splitbars dissapear and you cant resize the panels.
package com.nolij.prototype.gwtprototype.client;
import com.extjs.gxt.ui.client.Events;
import com.extjs.gxt.ui.client.Style.LayoutRegion;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;
public class GwtPrototype implements EntryPoint {
private Viewport v = new Viewport();
private ContentPanel panel1 = new ContentPanel();
private ContentPanel panel2 = new ContentPanel();
private ContentPanel panel3 = new ContentPanel();
public void onModuleLoad() {
RootPanel.get().add(v);
v.setHeight("100%");
panel1.setHeading("Panel 1");
panel2.setHeading("Panel 2");
panel3.setHeading("Panel 3");
setupButtons();
setMyLayout(getLayout2());
}
private void setMyLayout(LayoutContainer layout) {
v.removeAll();
v.add(layout);
v.layout();
}
private LayoutContainer getLayout1() {
LayoutContainer lc = new LayoutContainer();
lc.setHeight("100%");
lc.setLayout(new BorderLayout());
BorderLayoutData panel1BLD = new BorderLayoutData(LayoutRegion.NORTH, .25f);
BorderLayoutData panel2BLD = new BorderLayoutData(LayoutRegion.CENTER);
BorderLayoutData panel3BLD = new BorderLayoutData(LayoutRegion.SOUTH, .25f);
panel1BLD.setSplit(true);
panel2BLD.setSplit(true);
panel3BLD.setSplit(true);
lc.add(panel1,panel1BLD);
lc.add(panel2,panel2BLD);
lc.add(panel3,panel3BLD);
return lc;
}
private LayoutContainer getLayout2() {
LayoutContainer lc = new LayoutContainer();
lc.setHeight("100%");
lc.setLayout(new BorderLayout());
BorderLayoutData panel1BLD = new BorderLayoutData(LayoutRegion.WEST, .25f);
BorderLayoutData panel2BLD = new BorderLayoutData(LayoutRegion.CENTER);
BorderLayoutData panel3BLD = new BorderLayoutData(LayoutRegion.EAST, .25f);
panel1BLD.setSplit(true);
panel2BLD.setSplit(true);
panel3BLD.setSplit(true);
lc.add(panel1,panel1BLD);
lc.add(panel2,panel2BLD);
lc.add(panel3,panel3BLD);
return lc;
}
private LayoutContainer getLayout3() {
LayoutContainer lc = new LayoutContainer();
lc.setHeight("100%");
lc.setLayout(new BorderLayout());
BorderLayoutData panel1BLD = new BorderLayoutData(LayoutRegion.NORTH, .25f);
BorderLayoutData panel2BLD = new BorderLayoutData(LayoutRegion.CENTER);
BorderLayoutData panel3BLD = new BorderLayoutData(LayoutRegion.EAST, .25f);
panel1BLD.setSplit(true);
panel2BLD.setSplit(true);
panel3BLD.setSplit(true);
lc.add(panel1,panel1BLD);
lc.add(panel2,panel2BLD);
lc.add(panel3,panel3BLD);
return lc;
}
private void setupButtons() {
Button layout1Button = new Button("Layout 1");
Button layout2Button = new Button("Layout 2");
Button layout3Button = new Button("Layout 3");
layout1Button.addListener(Events.OnClick, new Listener(){
public void handleEvent(BaseEvent be) {
setMyLayout(getLayout1());
}});
layout2Button.addListener(Events.OnClick, new Listener(){
public void handleEvent(BaseEvent be) {
setMyLayout(getLayout2());
}});
layout3Button.addListener(Events.OnClick, new Listener(){
public void handleEvent(BaseEvent be) {
setMyLayout(getLayout3());
}});
panel1.add(layout1Button);
panel1.add(layout2Button);
panel1.add(layout3Button);
}
}
Not yet tested on 1.2.3 as the viewport bug introduced prevents us from upgrading our environment to 1.2.3.
In the below code, there are 3 layouts each accessible via their own getLayoutx(), which is passed into setLayout(). There are 3 buttons in panel1 that can swap you between layouts. In onModuleLoad, you can change the initially selected layout and see that they all work initially, however as soon as you swap to a different layout (or re-load the same current layout), the splitbars dissapear and you cant resize the panels.
package com.nolij.prototype.gwtprototype.client;
import com.extjs.gxt.ui.client.Events;
import com.extjs.gxt.ui.client.Style.LayoutRegion;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;
public class GwtPrototype implements EntryPoint {
private Viewport v = new Viewport();
private ContentPanel panel1 = new ContentPanel();
private ContentPanel panel2 = new ContentPanel();
private ContentPanel panel3 = new ContentPanel();
public void onModuleLoad() {
RootPanel.get().add(v);
v.setHeight("100%");
panel1.setHeading("Panel 1");
panel2.setHeading("Panel 2");
panel3.setHeading("Panel 3");
setupButtons();
setMyLayout(getLayout2());
}
private void setMyLayout(LayoutContainer layout) {
v.removeAll();
v.add(layout);
v.layout();
}
private LayoutContainer getLayout1() {
LayoutContainer lc = new LayoutContainer();
lc.setHeight("100%");
lc.setLayout(new BorderLayout());
BorderLayoutData panel1BLD = new BorderLayoutData(LayoutRegion.NORTH, .25f);
BorderLayoutData panel2BLD = new BorderLayoutData(LayoutRegion.CENTER);
BorderLayoutData panel3BLD = new BorderLayoutData(LayoutRegion.SOUTH, .25f);
panel1BLD.setSplit(true);
panel2BLD.setSplit(true);
panel3BLD.setSplit(true);
lc.add(panel1,panel1BLD);
lc.add(panel2,panel2BLD);
lc.add(panel3,panel3BLD);
return lc;
}
private LayoutContainer getLayout2() {
LayoutContainer lc = new LayoutContainer();
lc.setHeight("100%");
lc.setLayout(new BorderLayout());
BorderLayoutData panel1BLD = new BorderLayoutData(LayoutRegion.WEST, .25f);
BorderLayoutData panel2BLD = new BorderLayoutData(LayoutRegion.CENTER);
BorderLayoutData panel3BLD = new BorderLayoutData(LayoutRegion.EAST, .25f);
panel1BLD.setSplit(true);
panel2BLD.setSplit(true);
panel3BLD.setSplit(true);
lc.add(panel1,panel1BLD);
lc.add(panel2,panel2BLD);
lc.add(panel3,panel3BLD);
return lc;
}
private LayoutContainer getLayout3() {
LayoutContainer lc = new LayoutContainer();
lc.setHeight("100%");
lc.setLayout(new BorderLayout());
BorderLayoutData panel1BLD = new BorderLayoutData(LayoutRegion.NORTH, .25f);
BorderLayoutData panel2BLD = new BorderLayoutData(LayoutRegion.CENTER);
BorderLayoutData panel3BLD = new BorderLayoutData(LayoutRegion.EAST, .25f);
panel1BLD.setSplit(true);
panel2BLD.setSplit(true);
panel3BLD.setSplit(true);
lc.add(panel1,panel1BLD);
lc.add(panel2,panel2BLD);
lc.add(panel3,panel3BLD);
return lc;
}
private void setupButtons() {
Button layout1Button = new Button("Layout 1");
Button layout2Button = new Button("Layout 2");
Button layout3Button = new Button("Layout 3");
layout1Button.addListener(Events.OnClick, new Listener(){
public void handleEvent(BaseEvent be) {
setMyLayout(getLayout1());
}});
layout2Button.addListener(Events.OnClick, new Listener(){
public void handleEvent(BaseEvent be) {
setMyLayout(getLayout2());
}});
layout3Button.addListener(Events.OnClick, new Listener(){
public void handleEvent(BaseEvent be) {
setMyLayout(getLayout3());
}});
panel1.add(layout1Button);
panel1.add(layout2Button);
panel1.add(layout3Button);
}
}
Not yet tested on 1.2.3 as the viewport bug introduced prevents us from upgrading our environment to 1.2.3.