Cómo establecer mediante programación la posición de división de BorderLayout en GXT?

StackOverflow https://stackoverflow.com/questions/3874221

  •  28-09-2019
  •  | 
  •  

Pregunta

Tengo un diseño conjunto de la frontera en un widget usando Ext GWT. ¿Hay una manera donde puedo ajustar la posición de 'división' de forma automática? La razón de ser, si el usuario cambia el tamaño de un control en una página (no necesariamente el padre de uno de la división en el widget es), me gustaría establecer el valor de división para un determinado valor de porcentaje (como el 30%). ¿Cómo puede hacerse esto?

Este es el código existente:

import com.extjs.gxt.ui.client.Style.LayoutRegion;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
import com.google.gwt.user.client.Element;

public class BorderLayoutExample extends LayoutContainer {  

  setSplitPositionTo(float percentage) {
  // TODO: How to do this?
  }

  protected void onRender(Element target, int index) {  
    super.onRender(target, index);  
    final BorderLayout layout = new BorderLayout();  
    setLayout(layout);  
    setStyleAttribute("padding", "10px");  

    ContentPanel west = new ContentPanel();  
    ContentPanel center = new ContentPanel();  

    //uncomment this section if you dont want to see headers
    /*
     * west.setHeaderVisible(false);
     * center.setHeaderVisible(false);
     */

    BorderLayoutData westData = new BorderLayoutData(LayoutRegion.WEST, 150);  
    westData.setSplit(true);  
    westData.setCollapsible(true);  
    westData.setMargins(new Margins(0,5,0,0));  

    BorderLayoutData centerData = new BorderLayoutData(LayoutRegion.CENTER);  
    centerData.setMargins(new Margins(0));  

    add(west, westData);  
    add(center, centerData);  
  }  
}  
¿Fue útil?

Solución

Éste era bastante complicado

Usted necesita obtener acceso a un layoutdata no centro y widget de diseño para la frontera. (Centro Como se calcula a través de espacio restante). A continuación, ponerlos a disposición el método setSplitPositionTo.

En mi ejemplo, los hizo miembros de la clase. Al final mi aspecto del método de la siguiente manera y una llamada como myBorderLayoutInstance.setPlitPositionTo (0,4F); funciona como un encanto utilizando el ejemplo que nos ha facilitado y esta enmienda.

BorderLayoutData westData;
ContentPanel west;

void setSplitPositionTo(float percentage) {
  westData.setSize(percentage);
  Component c = west;
  Map<String, Object> state = c.getState();
  state.put("size", westData.getSize());
  c.saveState();
  layout(true);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top