Question

J'utilise GridLayout dans mon application d'interface graphique SWT. J'ai le GridData suivant défini pour chaque cellule de la grille. La cellule de grille elle-même n'est qu'une étiquette.

    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;

Et je crée chaque élément lable comme ceci -

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

Maintenant, malgré l’utilisation de la propriété verticalAlignment, de la propriété verticalIndent et de setAlignment sur l’étiquette elle-même, je ne parviens pas à centrer le texte verticalement par rapport à la surface de la cellule (25 x 25). Je pense que je manque quelque chose. Comment puis-je réaliser l'alignement centré verticalement dans une cellule de la grille?

Était-ce utile?

La solution

Il n'y a pas de setVerticalAlignment () sur une étiquette et si vous définissez la hauteur à l'aide de heightHint dans LayoutData, cela devient la taille du contrôle et vous empêche effectivement de le définir au milieu. Une solution de contournement serait de mettre l'étiquette dans un composite de la taille souhaitée, puis de centrer le contrôle. Ex.

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

Autres conseils

CLabel? Pourquoi ne l'utilisez-vous pas?

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

Même, vous pouvez utiliser leftMargin, rightMargin, topMargin, bottomMargin.

(Je suis désolé pour après 3 ans plus tard)

J'ai également lutté avec ce problème. Label ne prend pas en charge le remplissage. J'ai fini par utiliser StyledText à la place.

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

Cela a fait l'affaire pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top