2009-01-12 11 views
5

Si tengo un campo de texto con SWT, ¿cómo puedo hacer para que el campo se llene al 100% o al ancho especificado?Cómo tener campos de texto llenos 100% horizontalmente

Por ejemplo, este campo de texto solo abarcará tanto en sentido horizontal.

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

Respuesta

4

Hacer algo como esto:

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

/: Dado que esta es la respuesta aceptada que retire los errores. Gracias por corregirme.

+0

Constructor GridData (int) está en desuso. Use "new GridData (SWT.FILL, SWT.CENTER)" en su lugar – qualidafial

+0

No debe reutilizar los objetos GridData ya que actúan como cachés para los cálculos de celdas de cuadrícula. La reutilización de GridData puede generar errores de diseño donde varios componentes que comparten un GridData común se truncan al tamaño de uno más pequeño. Esto está en javadoc de GridData. – christopheml

+1

Esto parece estar mal ahora (¿quizás la API ha cambiado?), El [constructor 'GridData (int ancho, int alto)'] (http://help.eclipse.org/juno/index.jsp?topic=%2Forg. eclipse.platform.doc.isv% 2Freference% 2Fapi% 2Forg% 2Feclipse% 2Fswt% 2Flayout% 2FGridData.html) establece las dimensiones mínimas y no se puede utilizar con estas constantes SWT. – Kapep

4

El posicionamiento de los elementos en un componente depende del objeto de diseño que está utilizando. En la muestra provista, está utilizando un GridLayout. Esto significa que debe proporcionar un objeto LayoutData específico para indicar cómo desea que se muestre su componente. En el caso de GridLayout, el objeto es GridData.

Para lograr lo que quiere, se tiene que crear un objeto gridData que agarra todo el espacio horizontal y lo llena:

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

formas alternativas incluyen el uso de un LayoutManager diferente, como FormLayout. Este diseño usa un objeto FormData que también le permite especificar cómo se colocará el componente en la pantalla.

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

Como nota al margen, el constructor nuevo GridData (estilo int) está marcado como "no recomendado" en la documentación. En su lugar, se prefiere el constructor explícito que se muestra en este ejemplo.

Cuestiones relacionadas