2013-03-08 5 views
0

en utilisant GXT 2.1.1 J'ai un certain nombre d'instances FormPanel, toutes avec la mise en page FormLayout par défaut. chaque formulaire contient un certain nombre d'occurrences TextField, la forme hôte plaçant automatiquement une étiquette pour chaque champ de texte. le problème est que, dans certains cas, le texte de l'étiquette est assez petit, plaçant un espace assez grand entre une étiquette et son champ de texte respectif. dans d'autres cas, le texte de l'étiquette est trop volumineux, ce qui force son contenu à s'enrouler. ce que je voudrais faire est en quelque sorte d'auto-dimensionner toutes les étiquettes à la largeur de l'étiquette la plus large sur ce formulaire.autosize étiquettes TextField dans FormPanel dans GXT

FormLayout possède une fonction setLabelWidth (int pixel), mais son argument doit être en pixels. Je pensais utiliser TextField.getFieldLabel() pour récupérer le texte de l'étiquette, mais je ne sais pas comment le convertir en pixels.

merci pour votre temps!

Répondre

0

Il n'y a pas de fonctionnalité à autoSize étiquette textfield sous forme panel.but vous pouvez définir la taille maximale comme suit

FormPanel formPanel = new FormPanel(); 
formPanel.setBodyBorder(false); 
formPanel.setButtonAlign(HorizontalAlignment.CENTER); 

    FormLayout layout = new FormLayout(); 
    layout.setLabelAlign(LabelAlign.LEFT); 
    layout.setLabelWidth(200);//Here you can set maximum size of your label 
    formPanel.setLayout(layout); 
+0

merci pour la réponse, Divyesh. Cependant, je ne souhaite pas définir aveuglément la largeur de l'étiquette simplement parce que certains d'entre eux sont trop courts pour commencer. ce dont j'ai besoin est un moyen de déterminer le nombre de pixels à partir du TextField.getFieldLabel() – user1056027

0

ne sais pas si cela est vraiment la réponse à la question, mais j'espère que peut-être aider quelqu'un sur la route. J'ai vraiment aimé la façon dont le FlexTable de GWT s'est comporté en ce qui concerne le redimensionnement de l'étiquette que je cherchais. cependant, GXT traite les instances Widget de GWT comme un composant Widget, qui n'est pas et non est parcouru pour les instances de champ imbriquées lorsqu'il est placé dans un FormPanel. donc ma solution finale était d'étendre panneau FormPanel de GXT et écraser ses fonctions getFields() et getChildFields(), avec la logique de ce dernier à la recherche de cas WidgetComponent en plus des instances de conteneurs:

for (Component comp : c.getItems()) { 
    if (comp instanceof Field) { 
     fields.add((Field<?>) comp); 
    } 
    else if (comp instanceof WidgetComponent) { 
     if (((WidgetComponent) comp).getWidget() instanceof FlexTable) { 

      // logic to retrieve Field instances from FlexTable 

     } 
    } 
    else if (comp instanceof Container) { 
     getChildFields((Container<Component>) comp, fields); 
    } 
    } 

pour compléter cette logique, j'ai aussi eu étendre FlexTable pour permettre la définition et la récupération des instances de champ.