我创建了一个使用GridLayout
的文本字段,并将GridData
(grabExcessHorizontalSpace
)的第3个参数设置为true。当我设置很长的非空白字符序列时,Text
字段不会换行。 Composite
通过文本字段展开。
下面是我的代码:
Composite composite = new Composite(m_shell, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
composite.setLayout(new GridLayout(2, false));
Label label = new Label(composite, SWT.LEAD);
label.setText("Label");
label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
Text text = new Text(composite,SWT.MULTI|SWT.BORDER|SWT.WRAP|SWT.V_SCROLL);
GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
gd.heightHint = 2 * text.getLineHeight();
text.setLayoutData(gd);
text.setText("trweghjfbfdshjfghjreuyhjfghkjhjhjsdghjreewhjdfghjhjgfdhjsdghjtreuytrehjdfghjhjdfgh8irtrhjghjhjdfghjdfghjfghjdfg");
答案 0 :(得分:2)
我假设您正在pack
上致电Shell
来完成布局。这会导致控件的大小按其首选大小进行调整-Text
控件的首选大小是不包含包装的大小。
如果您希望外壳为特定大小,则可以在外壳上layout
,而无需调用pack
。然后,文字应自动换行。
或者为widthHint
控件指定Text
。
答案 1 :(得分:1)
将widthHint
设置为0以及将horizontalAlignment
设置为SWT.FILL
会使文本填充其列中的所有可用空间,但不会增加更多。相反,它可以根据需要包装:
我在Windows 10上使用SWT 3.103.2。进行了尝试。 Greg在Mac上似乎有another result。
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout());
Composite composite = new Composite(shell, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
composite.setLayout(new GridLayout(2, false));
Label label = new Label(composite, SWT.LEAD);
label.setText("Label");
label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
Text text = new Text(composite, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
gd.heightHint = 2 * text.getLineHeight();
// Added widthHint
gd.widthHint = 0;
text.setLayoutData(gd);
text.setText("trweghjfbfdshjfghjreuyhjfghkjhjhjsdghjreewhjdfghjhjgfdhjsdghjtreuytrehjdfghjhjdfgh8irtrhjghjhjdfghjdfghjfghjdfg");
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();