Pregunta

Estoy usando GridLayout en mi aplicación SWT GUI. Tengo los siguientes GridData definidos para cada celda de la cuadrícula. La celda de la cuadrícula es solo una etiqueta.

    GridData gridData = new GridData();
    gridData.horizontalAlignment = GridData.FILL;
    gridData.grabExcessHorizontalSpace = true;
    gridData.grabExcessVerticalSpace = true;
    gridData.heightHint = 25;
    gridData.widthHint = 25;
    gridData.verticalAlignment = GridData.VERTICAL_ALIGN_CENTER;
    gridData.verticalIndent = 10;

Y creo cada elemento lable como este -

    Label l = new Label(shell, SWT.BORDER);
    l.setAlignment(SWT.CENTER);
    l.setText("some text");
    l.setLayoutData( gridData );

Ahora, mi problema es a pesar de usar la propiedad verticalAlignment, la propiedad verticalIndent y setAlignment en la etiqueta en sí, no puedo alinear el texto verticalmente con respecto al área de celdas de la cuadrícula (25 x 25). Creo que me estoy perdiendo algo. ¿Cómo puedo lograr la alineación centrada verticalmente en una celda de cuadrícula?

¿Fue útil?

Solución

No hay setVerticalAlignment () en una etiqueta y, si establece la altura, utilizando heightHint en LayoutData, eso se convierte en el tamaño del control y le impide efectivamente establecerlo en el medio. Una solución alternativa sería colocar la etiqueta en un compuesto con el tamaño que desea y luego centrar el control. Por ejemplo,

Composite labelCell = new Composite(shell, SWT.BORDER);
GridData gridData = new GridData();
gridData.heightHint = 250;
gridData.widthHint = 250;
labelCell.setLayoutData(gridData);
labelCell.setLayout(new GridLayout());
Label l = new Label(labelCell , SWT.NONE);
l.setText("some text");
l.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));

Otros consejos

¿CLabel? ¿Por qué no lo usas?

CLabel cl = new CLabel(shell, SWT.CENTER);
cl.setBounds(0, 0, 100, 100);
cl.setText("Custom Label!!!");

Incluso, puedes usar leftMargin, rightMargin, topMargin, bottomMargin.

(Lo siento por después de 3 años)

También luché con este problema. Label no admite el relleno. Terminé usando StyledText en su lugar.

final StyledText text = new StyledText(parent, SWT.WRAP);
final int padding = 5;

text.setLeftMargin(padding);
text.setRightMargin(padding);
text.setTopMargin(padding);
text.setBottomMargin(padding);

text.setWordWrap(true);
text.setCaret(null);

Esto hizo el truco para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top