2009-01-12 12 views
5

Wenn ich ein Textfeld mit SWT habe, wie kann ich das Feld auf 100% oder eine bestimmte Breite füllen.Wie Textfelder 100% horizontal ausfüllen

Zum Beispiel wird dieses Textfeld nur so viel horizontal erreichen.

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

Antwort

4

so etwas wie dieses Fabrikat:

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

/: Da dies die akzeptierte Antwort ist entferne ich die Fehler. Danke für die Korrektur.

+0

Konstruktor GridData (int) ist veraltet. Verwenden Sie stattdessen "new GridData (SWT.FILL, SWT.CENTER)" – qualidafial

+0

Sie sollten GridData-Objekte nicht erneut verwenden, da sie als Caches für Gitterzellenberechnungen dienen. Die Wiederverwendung von GridData kann zu Layout-Fehlern führen, bei denen mehrere Komponenten, die ein gemeinsames GridData teilen, auf die Größe des kleinsten GridData gekürzt werden. Dies ist in der GridData-Javadoc. – christopheml

+1

Das scheint jetzt falsch (vielleicht hat sich die API geändert?), Der [Konstruktor 'GridData (int width, int height)'] (http://help.eclipse.org/juno/index.jsp?topic=%2Forg. eclipse.platform.doc.isv% 2Freferenz% 2Fapi% 2Forg% 2Feclipse% 2Fswt% 2Flayout% 2FGridData.html) legt minimale Abmessungen fest und kann nicht mit diesen SWT-Konstanten verwendet werden. – Kapep

4

Die Positionierung von Elementen in einer Komponente hängt vom verwendeten Layout-Objekt ab. In dem bereitgestellten Beispiel verwenden Sie ein GridLayout. Das bedeutet, dass Sie ein bestimmtes LayoutData-Objekt angeben müssen, um anzugeben, wie Ihre Komponente angezeigt werden soll. Im Falle von GridLayout ist das Objekt GridData.

Um das zu erreichen, was Sie wollen, müssen Sie ein Griddata-Objekt erstellen, das alle horizontalen Raum greift und füllt es:

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

Alternative Möglichkeiten umfassen einen anderen Layoutmanager, wie Formlayout verwenden. Dieses Layout verwendet ein FormData-Objekt, mit dem Sie auch angeben können, wie die Komponente auf dem Bildschirm platziert wird.

You can also read this article on Layouts to understand how Layouts work.

Als eine Randnotiz ist der Konstruktor new GridData (int style) in der Dokumentation als "nicht empfohlen" markiert. Der explizite Konstruktor in diesem Beispiel wird stattdessen bevorzugt.