2010-10-06 30 views
0

J'ai une disposition de bordure sur un widget utilisant Ext-GWT. Existe-t-il un moyen de définir automatiquement la position de partage? Raison d'être, si l'utilisateur redimensionne un contrôle sur une page (pas nécessairement le parent de celui dans lequel se trouve le widget divisé), je voudrais définir la valeur de partage à un certain pourcentage (comme 30%). Comment cela peut-il être fait?Comment programmer la position de séparation de BorderLayout dans GXT?

Voici le code existant:

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); 
    } 
} 

Répondre

1

Celui-ci était assez difficile

Vous aurez besoin d'avoir accès à un layoutdata non central et le widget pour la mise en page de la frontière. (Le centre est calculé via l'espace restant). Puis rendez-les disponibles à la méthode setSplitPositionTo.

Dans mon exemple, je les ai fait membres de la classe. Au final ma méthode ressemble à ceci et un appel comme myBorderLayoutInstance.setPlitPositionTo (0.4f); fonctionne comme un charme en utilisant l'exemple que vous avez fourni et cet amendement.

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); 
}