2010-11-18 7 views
15

Contexte: Je fais du travail d'interface utilisateur dans un environnement d'éclipse où je remplis un contrôle de combo avec certaines valeurs. Les valeurs de chaîne ont une longueur différente et souvent une longueur supérieure à la largeur du combo et à la largeur du composite parent.Comment redimensionner la liste déroulante d'une liste déroulante?

Problème: Lorsque j'ouvre la liste déroulante, la largeur de la liste est supérieure à la largeur du composite parent et l'utilisateur n'a pas pu voir la valeur complète de l'entrée de liste.

J'ai essayé d'utiliser l'option "setTextLimit", mais sans succès. Pour moi, c'est parfaitement adéquat si je pouvais définir la largeur de la liste dropdon avec une valeur constante.

Exemple de code:

this.mComponentName = new Combo (lComponentComposite, SWT.BORDER); 
this.mComponentName.setTextLimit(COMBO_TEXT_LIMIT); 
GridData componentNameGridData = new GridData(); 
componentNameGridData.widthHint = 166; 
this.mComponentName.setLayoutData(componentNameGridData); 
this.mComponentName.addSelectionListener(this.mComboSelectionAdapter); 
this.mComponentName.addKeyListener(this.mComboKeyAdapter); 

Salutations dague

Répondre

-1
combo.setPreferredSize(new Dimension(FIX_WIDTH, FIX_HEIGHT)); 
+1

setPrefferedSize n'est pas disponible en combo SWT – codejammer

1

Lors de la création d'une zone de liste déroulante précise défilement horizontal aussi

this.mComponentName = new Combo (lComponentComposite, SWT.BORDER|SWT.H_SCROLL); 

Cela ne laissera pas le trop-plein texte

+0

l'ajout d'un rouleau ne l'arrêtera pas de se développer si le nom est long. Voir ma question [ici] (http://stackoverflow.com/questions/32561924/how-to-stop-jface-combo-box-from-re-sizing-on-a-window-re-size) –

-2

Essayez cette

  JComboBox CB = new JComboBox(); 
      CB.setPreferredSize(new Dimension(int, int)); 
      p.add(CB);// which p is a JPanel 
+3

La question concerne SWT, pas AWT/Swing. –

0

Avez-vous essayé passer une autre valeur que votre deuxième paramètre dans l'initialisation de votre Combo (première ligne)? Quelque chose d'autre que SWT.BORDER?

J'ai essayé de découvrir s'il était possible d'afficher des chaînes sur plusieurs lignes (en tant qu'élément d'une seule zone de liste déroulante), mais sans succès. Cela réduirait la largeur de vos articles. Essayez d'ajouter \ n à quelques chaînes que vous ajoutez à la liste déroulante, et voyez si cela fonctionnera. Si cela fonctionne, vous pouvez automatiser ce processus plus tard en analysant la chaîne et en vérifiant si le nombre de caractères d'espace est élevé et en ajoutant \ n après chaque cinquième ou sixième caractère vide. Je pense que la suggestion de codejammer est la meilleure, mais je ne peux pas encore l'emporter.

+0

Si vous utilisiez une table ou un arbre, la barre de défilement s'afficherait à votre guise, sauf si vous utilisiez NO_SCROLL comme paramètre de style. – programstinator

1

C'est vraiment une bonne question. Après avoir creusé à travers les forums de développeurs et même le code source, je penche pour dire que ce n'est pas possible.

Je résolu le problème temporairement par le passage à un CCombo, mais je n'aime pas la solution que je crois l'une des forces de SWT est dans l'utilisation de widgets natifs, et le CCombo ne regarde pas aussi bon (au moins sur Win7 et OS X).

1

Lorsque vous sélectionnez une zone de liste déroulante ou une zone de liste déroulante pour la redimensionner, seules les poignées de dimensionnement de droite et de gauche sont actives. Utilisez ces poignées pour définir la largeur de la boîte telle qu'elle est affichée initialement. Choisissez la flèche déroulante à droite de la zone de liste déroulante. Le contour du contrôle change pour afficher la taille de la zone de liste déroulante avec la zone déroulante étendue.

Utilisez la poignée de dimensionnement inférieure pour modifier la taille initiale de la zone déroulante. Sélectionnez à nouveau la flèche déroulante pour fermer la partie déroulante de la zone de liste déroulante.

0

Résolu partiellement le problème d'ajouter aux noms d'éléments certains espaces (avoir défini le nombre d'espaces par essais et erreurs). Maintenant, le combo est plus large et tous les textes sont visibles, mais le défilement horizontal est également visible.Un autre point est la combinaison de redimensionnement quand il gagne le focus et restaure la taille après un focus perdu. Exemple ci-dessous

final Point p = combo.getSize(); 
combo.addFocusListener(new FocusListener() { 
    @Override 
    public void focusLost(FocusEvent e) { 
     ((Control) e.getSource()).setSize(p); 
    } 

    @Override 
    public void focusGained(FocusEvent e) { 
     ((Control) e.getSource()).setSize(new Point(400, p.y)); 
    } 
});