2010-08-17 7 views
5

Estoy usando un GridLayout tratando de hacer una etiqueta de crecimiento automático sin ocultar nada de su contenido. Aquí hay un código simple para probar: cada vez que presiono el botón, el texto de la etiqueta aumenta de tamaño, pero solo después de cambiar el tamaño horizontal de la ventana obtengo el diseño correcto. ¿Hay alguna manera de arreglar esto sin tener que cambiar el tamaño de la ventana? Creo que he probado todas las propiedades y todavía no puedo hacer que funcione, ¡eso me vuelve loco!Problema con el diseño: autogrow label (SWT)

Esto es lo que tengo

wrong layout

Esto es como debe ser

right layout

import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.SelectionAdapter; 
import org.eclipse.swt.events.SelectionEvent; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.List; 
import org.eclipse.swt.widgets.Shell; 

public class UItest { 

    protected Shell shell; 
    private Label label; 

    public static void main(String[] args) { 
     try { 
      UItest window = new UItest(); 
      window.open(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public void open() { 
     Display display = Display.getDefault(); 
     createContents(); 
     shell.open(); 
     shell.layout(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) { 
       display.sleep(); 
      } 
     } 
     display.dispose(); 
    } 

    protected void createContents() { 
     shell = new Shell(); 
     shell.setSize(450, 300); 
     shell.setText("SWT Application"); 
     shell.setLayout(new GridLayout(1, false)); 

     Button button = new Button(shell, SWT.NONE); 
     button.addSelectionListener(new SelectionAdapter() { 
      public void widgetSelected(SelectionEvent arg0) { 
       label.setText(label.getText() + " " + label.getText()); 
      } 
     }); 
     button.setText("New Button"); 

     label = new Label(shell, SWT.WRAP); 
     label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); 
     label.setText("New Label"); 

     List list = new List(shell, SWT.BORDER); 
     list.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 

    } 

    protected Label getLabel() { 
     return label; 
    } 
} 

Gracias por su tiempo.


resuelve con los siguientes cambios:

Button button = new Button(shell, SWT.NONE); 
button.addSelectionListener(new SelectionAdapter() { 
    public void widgetSelected(SelectionEvent arg0) { 
     label.setText(label.getText() + " " + label.getText()); 
     shell.layout(); // ADDED THIS 
    } 
}); 
button.setText("New Button"); 

label = new Label(shell, SWT.WRAP); 
// SET HORIZONTAL GRAB ON LABEL (FIRST TRUE IN GridData CONSTRUCTOR) 
label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); 
label.setText("New Label"); 

Respuesta

6

creo, el problema es que el diseño no se invalida cuando cambia el texto - tratan de forzar una relayouting (llamando getShell().layout(true, true)).

+0

Sí! ¡eso fue todo !, ¡muchas gracias! –

+0

Lo intenté, pero ha cambiado completamente el Diálogo ... –