Pergunta

Eu estou usando GridLayout em meu aplicativo SWT GUI. Eu tenho as seguintes gridData definidos para cada célula da grade. A própria célula grade é apenas um rótulo.

    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;

E eu criar cada elemento etiqueta como este -

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

Agora meu problema é, apesar de usar VerticalAlignment propriedade, verticalIndent propriedade e setAlignment no próprio rótulo, eu não sou capaz de conseguir a alinhar texto verticalmente centrado em relação à área da célula da grelha (25 x 25). Eu acho que eu estou faltando alguma coisa. Como posso conseguir o alinhamento vertical centrada em uma célula da grade?

Foi útil?

Solução

Não há setVerticalAlignment () em uma etiqueta e se você definir a altura, usando o heightHint na LayoutData, que se torna o tamanho do controle e eficaz que você parar de defini-lo no meio. Uma solução alternativa seria colocar a etiqueta em um composta com o tamanho desejado e, em seguida, o centro de controle. Por exemplo.

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

Outras dicas

CLabel? Por que não usá-lo?

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

Mesmo, você pode usar leftMargin, rightMargin, TopMargin, BottomMargin.

(Sinto muito por após 3 anos depois)

Eu também lutei com esta questão. Label não suporta estofamento. Acabei usando StyledText vez.

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

Este fez o truque para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top