我有ScrolledComposite
,只允许垂直滚动。 (heighthint = 400
)。
在这个ScrolledComposite中,我有另一个CompositeA
(滚动时高度可能超过400)来存储所有其他小部件。
我有一个很长的标签(启用了SWT.WRAP
)。但它不是包装,而是始终以单行显示。我希望这个标签根据其父级(CompositeA
)
我忘了添加CompositeA
为GridLayout
的{{1}}列{。}}。
这是我的代码:
makeColumnsEqualWidth = true
如果你运行它,你可以看到绿色的scrolledcomposite和一个红色的复合材料。我希望红色复合宽度相对填充到scrolledcomposite的宽度,而不需要硬编码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();
}
。
答案 0 :(得分:4)
我在布局中遇到了同样的问题,并找到了this有用的答案。
由于'它不是bug,它是一个功能'请在评论#19 here中尝试此答案。
我为我的Label使用以下代码行。
Label tip = new Label(shell, SWT.WRAP | SWT.BORDER | SWT.LEFT);
final GridData data = new GridData(SWT.HORIZONTAL, SWT.TOP, true, false, 1, 1);
tip.setLayoutData(data);
tip.setText("Here stands my long, long and much more longer text...");
答案 1 :(得分:1)
尝试在创建标签时添加SWT.WRAP。它对我有用。
Label label = new Label(parent, SWT.WRAP);
答案 2 :(得分:0)
令人惊讶的是,TableWrapLayout
经理不会指望水平滚动的复合材料。要使用Form
工具包上的布局。我刚刚做了一个代码示例,可以在上面做些什么。
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();
header2.setLayoutData(wd);
body.setBackground(body.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
// Scrolled composite
Composite sc = toolkit.createComposite(body, SWT.BORDER_SOLID | SWT.V_SCROLL);
sc.setBackground(new Color(display, 50,255,155));
layout = new TableWrapLayout();
sc.setLayout(layout);
wd = new TableWrapData(TableWrapData.FILL_GRAB);
wd.heightHint = 360;
wd.colspan = 2;
sc.setLayoutData(wd);
Composite innerComposite = toolkit.createComposite(sc);
layout = new TableWrapLayout();
innerComposite.setLayout(layout);
innerComposite.setBackground(new Color(display, 255,50,50));
wd = new TableWrapData(TableWrapData.FILL_GRAB);
innerComposite.setLayoutData(wd);
Section section = toolkit.createSection(innerComposite,
Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
section.setText("Section");
section.setDescription("A not so long description......................");
wd = new TableWrapData(TableWrapData.FILL_GRAB);
// wd.maxWidth = 600; // don't want to hardcode this value
section.setLayoutData(wd);
// Composite for Section
Composite sectionClient = toolkit.createComposite(section);
layout = new TableWrapLayout();
layout.numColumns = 2;
// layout.makeColumnsEqualWidth = true;
sectionClient.setLayout(layout);
section.setClient(sectionClient);
wd = new TableWrapData(TableWrapData.FILL_GRAB);
sectionClient.setLayoutData(wd);
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.colspan = 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_GRAB);
lineBreak.setLayoutData(wd);
//
// /***********************/
//
Button button1 = toolkit.createButton(sectionClient, "Button 1", SWT.RADIO);
wd = new TableWrapData();
wd.colspan = 2;
button1.setLayoutData(wd);
Button button2 = toolkit.createButton(sectionClient, "Button 2", SWT.RADIO);
wd = new TableWrapData();
wd.colspan = 2;
button2.setLayoutData(wd);
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();
wd.colspan = 2;
rightDesc2.setLayoutData(wd);
Label desc = toolkit.createLabel(sectionClient, "Desc:");
Text hello = toolkit.createText(sectionClient, "hello world");
wd = new TableWrapData(TableWrapData.FILL_GRAB);
hello.setLayoutData(wd);
}
答案 3 :(得分:0)
如果您要包装长文本标签,SWT.WRAP是不够的。如果未在布局中指定 widthHint ,则标签默认不会包装其文本。这对我有用:
Label label = new Label(parent, SWT.WRAP);
label.setText("very very long text....");
GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1);
gd.widthHint = 200;
label.setLayoutData(gd);