2009-01-12 4 views
5

Si j'ai un champ de texte avec SWT, comment puis-je obtenir le champ pour remplir à 100% ou une certaine largeur spécifiée.Comment faire pour que les champs de texte remplissent 100% horizontalement

Par exemple, ce champ de texte atteindra seulement autant horizontalement.

public class Tmp { 
    public static void main (String [] args) { 
     Display display = new Display(); 
     Shell shell = new Shell (display); 
     GridLayout gridLayout = new GridLayout(); 
     shell.setLayout (gridLayout); 

     Button button0 = new Button(shell, SWT.PUSH); 
     button0.setText ("button0"); 

     Text text = new Text(shell, SWT.BORDER | SWT.FILL); 
     text.setText ("Text Field"); 

     shell.setSize(500, 400); 
     //shell.pack(); 
     shell.open(); 

     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     display.dispose(); 
    } 
} 

Répondre

4

Faire quelque chose comme ceci:

Text text = new Text(shell, SWT.BORDER); 
text.setText ("Text Field"); 
text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER)); 

/: Puisque c'est la réponse acceptée éleminez les erreurs. Merci de me corriger.

+0

Le constructeur GridData (int) est obsolète. Utilisez "new GridData (SWT.FILL, SWT.CENTER)" à la place – qualidafial

+0

Vous ne devez pas réutiliser les objets GridData car ils servent de cache pour les calculs de la cellule. La réutilisation de GridData peut conduire à des bogues de mise en page où plusieurs composants partageant une GridData commune sont tronqués à la taille de la plus petite. Ceci est dans le javadoc de GridData. – christopheml

+1

Cela semble faux maintenant (peut-être que l'API a changé?), Le constructeur [GridData (int largeur, int hauteur) '] (http://help.eclipse.org/juno/index.jsp?topic=%2Forg. eclipse.platform.doc.isv% 2Freference% 2Fapi% 2Forg% 2Feclipse% 2Fswt% 2Flayout% 2FGridData.html) définit des dimensions minimales et ne peut pas être utilisé avec ces constantes SWT. – Kapep

4

Le positionnement des éléments dans un composant dépend de l'objet de mise en page que vous utilisez. Dans l'exemple fourni, vous utilisez un GridLayout. Cela signifie que vous devez fournir un objet LayoutData spécifique pour indiquer comment vous souhaitez afficher votre composant. Dans le cas de GridLayout, l'objet est GridData.

Pour obtenir ce que vous voulez, vous devez créer un objet gridData qui saisit tout l'espace horizontal et remplit:

// Fills available horizontal and vertical space, grabs horizontal space,grab 
// does not grab vertical space 
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, false); 
text.setLayoutData(gd); 

D'autres moyens incluent l'utilisation d'un LayoutManager différent, comme FormLayout. Cette mise en page utilise un objet FormData qui vous permet également de spécifier comment le composant sera placé à l'écran.

You can also read this article on Layouts to understand how Layouts work. En guise de remarque, le constructeur new GridData (style int) est marqué comme "non recommandé" dans la documentation. Le constructeur explicite montré dans cet exemple est préféré à la place.

Questions connexes