我正在使用带有2列的Gridlayout。我有标签和相应的文本控件。我希望第一个标签的Text控件滑下标签而不是紧挨着它(因为它是一个gridlayout)。为此,我认为moveBelow方法可行,但似乎不是。我是否错误地解释了该方法的使用?
Label label = Components.createLabel(myContainer, SWT.LEFT
| SWT.WRAP);
abel.setText("WC Plan Name");
textName = createTextControl(myContainer, SWT.LEFT);
textName.moveBelow(label);
private Text createTextControl(Composite parent, int horizontalAlignment)
{
final Text textControl = Components.createText(parent, SWT.SINGLE | SWT.BORDER);
final GridData layoutData = new GridData(horizontalAlignment, SWT.FILL, false, false);
layoutData.widthHint = 200;
textControl.setLayoutData(layoutData);
return textControl;
}
答案 0 :(得分:2)
moveBelow()
完全按照文档中的说法进行操作:
按接收顺序将接收器移动到指定控件下方。如果参数为null,则接收器将移动到绘图顺序的底部。绘图顺序底部的控件将被占据交叉区域的所有其他控件覆盖。
这意味着它可以用于重新排序子项(如果父项的布局允许)。例如,如果您有RowLayout
并在最后一个孩子上拨打moveBelow(null)
,则会将其移至顶部。
现在解决您的问题:您有{2}列GridLayout
。从左上角到右下角填充GridLayout
。如果您希望两个元素显示在彼此之下而不是彼此相邻,则有两个选项:
Label
,以便占据第一个元素右侧的空间GridData
,并将GridData#horizontalSpan
设置为2
。这样它将跨越两列。<强>更新强>
以下是解决方案2的示例:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new GridLayout(4, false));
Text text = new Text(shell, SWT.BORDER);
text.setLayoutData(new GridData(SWT.BEGINNING, SWT.TOP, false, true, 4, 1));
text = new Text(shell, SWT.BORDER);
text.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 4, 1));
for (int i = 0; i < 8; i++)
{
new Button(shell, SWT.PUSH).setText("Button " + i);
}
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
看起来像这样: