SWT - Wrap label au sein d'un composite
J'ai ScrolledComposite
qui ne permet que le défilement vertical. (heighthint = 400)
Dans ce ScrolledComposite, j'ai une autre CompositeA
(la hauteur peut dépasser 400 pour le défilement) pour stocker tous les autres widgets.
J'ai une très longue étiquette (avec SWT.WRAP
activé). Mais au lieu de l'emballage, il est toujours visible dans une seule ligne. Je veux que ce label pour l'envelopper en fonction de la largeur de son parent (CompositeA
)
J'ai oublié d'ajouter que cette CompositeA
est un 2 colonne 'GridLayout' avec makeColumnsEqualWidth = true
EDIT:
C'est mon code.
public void createPartControl(Composite parent) {
//TODO Auto-generated method stub
Display display = parent.getDisplay();
toolkit = new FormToolkit(display);
form = toolkit.createForm(parent);
form.setText("ABC");
Composite body = form.getBody();
TableWrapLayout layout = new TableWrapLayout();
layout.numColumns = 2;
body.setLayout(layout);
Label header1 = toolkit.createLabel(body, "ABC: ");
Font font = new Font(display, "Arial", 11, SWT.BOLD);
header1.setFont(font);
Label header2 = toolkit.createLabel(body, "XYZ",
SWT.WRAP);
font = new Font(display, "Arial", 11, SWT.NONE);
header2.setFont(font);
TableWrapData wd = new TableWrapData(TableWrapData.FILL_GRAB);
header2.setLayoutData(wd);
form.getBody().setBackground(
form.getBody().getDisplay()
.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
//Scrolled composite
ScrolledComposite sc = new ScrolledComposite(body, SWT.BORDER_SOLID
| SWT.V_SCROLL);
sc.setAlwaysShowScrollBars(true);
sc.setBackground(new Color(display, 50,255,155));
wd = new TableWrapData(TableWrapData.FILL);
wd.heightHint = 360;
wd.colspan = 2;
wd.grabHorizontal = false;
sc.setLayoutData(wd);
sc.setLayout(new TableWrapLayout());
Composite innerComposite = toolkit.createComposite(sc);
sc.setContent(innerComposite);
innerComposite.setLayout(new TableWrapLayout());
innerComposite.setBackground(new Color(display, 255,50,50));
Section section = toolkit.createSection(innerComposite,
Section.DESCRIPTION | Section.TITLE_BAR | Section.EXPANDED);
wd = new TableWrapData(TableWrapData.FILL);
wd.maxWidth = 600; //don't want to hardcode this value
section.setLayoutData(wd);
section.setText("Section");
section.setDescription("A not so long description......................");
//Composite for Section
Composite sectionClient = toolkit.createComposite(section);
layout = new TableWrapLayout();
layout.numColumns = 2;
layout.makeColumnsEqualWidth = true;
sectionClient.setLayout(layout);
toolkit.createButton(sectionClient, "Button 1", SWT.RADIO);
Label rightDesc = toolkit
.createLabel(
sectionClient,
"A very long long long long long long long long long long long long long long long long long long long long desc that needs wrapping",
SWT.WRAP);
font = new Font(display, "Arial", 10, SWT.ITALIC);
rightDesc.setFont(font);
wd = new TableWrapData();
wd.rowspan = 2;
rightDesc.setLayoutData(wd);
Combo comboDropDown = new Combo(sectionClient, SWT.DROP_DOWN
| SWT.BORDER);
comboDropDown.setText("DDL");
comboDropDown.add("1");
comboDropDown.add("2");
comboDropDown.add("3");
Label lineBreak = toolkit.createSeparator(sectionClient, SWT.SEPARATOR
| SWT.HORIZONTAL);
wd = new TableWrapData(TableWrapData.FILL);
wd.colspan = 2;
lineBreak.setLayoutData(wd);
/***********************/
toolkit.createButton(sectionClient, "Button 2", SWT.RADIO);
Label rightDesc2 = toolkit
.createLabel(
sectionClient,
"A long long long long long long long long long long long long long long long long long long long long desc that needs wrapping",
SWT.WRAP);
font = new Font(display, "Arial", 10, SWT.ITALIC);
rightDesc2.setFont(font);
wd = new TableWrapData(TableWrapData.FILL);
wd.rowspan = 3;
rightDesc2.setLayoutData(wd);
toolkit.createLabel(sectionClient, "Desc",
SWT.WRAP);
toolkit.createText(sectionClient, "hello world", SWT.NONE);
section.setClient(sectionClient);
innerComposite.pack();
}
Si vous l'exécutez, vous pouvez voir un vert scrolledcomposite et un composite rouge. Je veux que le composite rouge largeur pour remplir la largeur de la scrolledcomposite relativement sans coder en dur maxWidth = 600.
FILL
pour horizontalAlignment
et true
pour grabExcessHorizontalSpace
dans le GridData
de l'étiquette et le Composite qu'il contenait. Espérons que cette aide.je pense que quand je l'appelle
innerComposite.pack()
il va la disposition de l'étiquette dans une seule ligne? Mais sans innerComposite.pack()
je ne vais pas être en mesure de voir toute la mise en page.
OriginalL'auteur humansg | 2012-08-02
Vous devez vous connecter pour publier un commentaire.
J'ai le même problème ici, dans ma mise en page et trouvé cette réponse utile.
En raison de "c'est pas un bug, c'est une fonction' essayer cette réponse de commentaire #19 ici.
- Je utiliser les lignes de code suivantes pour mon Label.
new GridData(SWT.HORIZONTAL, ...)
l'air bizarre,HORIZONTAL
n'est pas un de ces constantes selon leGridData
de la documentation.OriginalL'auteur ryanthara
Essayer d'ajouter de la SWT.ENVELOPPER lors de la création de l'Étiquette. Il a travaillé pour moi.
OriginalL'auteur dac2009
Elle a été surprise de comprendre que
TableWrapLayout
gestionnaire ne sera pas compter sur les composites qui permet de faire défiler horizontalement. Pour garder cette mise en page sur leForm
boîte à outils devraient être utilisés. Je viens de faire un exemple de code de ce qui pourrait être fait en tenant ci-dessus.OriginalL'auteur Roman C
Je pourrais rappeler que c'est mal, mais je me souviens que je devais ré-agencement composite lorsque le texte a changé. Que fait le texte.
le texte n'a pas changé. c'est juste que c'est déjà un long texte lors de la première d'affichage
Et vous faire une mise en page une fois que vous affichez d'abord?
oui j'ai fait une mise en page. le problème est que je ne veux pas coder en dur la largeur. Je veux qu'il à suivre automatiquement la ScrolledComposite. Mais je ne semble pas être en mesure d'obtenir la largeur de la SC. Continuez à retourner 0.
Intéressant. Dans la solution que j'ai lié le chap est l'ajout d'un layoutData réglage de l'étiquette. Qui vous ne vous sentez pas comme je le vois.
OriginalL'auteur dbalakirev