有一个给定的Formular,例如你在图片中可以看到的Formular。 我正在为swt,RCP-App编程。 我无法直接访问组件,但必须使用布局对齐它们。 首先,使用Gridlayout来对齐组件。 第一列包含标签,第二列包含文本字段。
剩下的是,我希望文本字段具有相同的宽度。 我原来的计划是让文本字段填充第二列水平然后做某事。像margin-right。
GridData具有以下功能:
GridData data = new GridData(SWT.FILL, SWT.NONE, true, false);
data.horizontalAlignment = GridData.FILL;
...
我使用GridLayout的代码如下所示:
GridLayout layout = new Gridlayout(2, false);
GridData data = new GridData(SWT.FILL, SWT.NONE, true, false);
data.horizontalAlignment = GridData.FILL;
parent.setLayout(layout); -> Produces the given image
parent.setLayoutData(data);
-> Seems to do nothing in combination with gridlayout, but the layout is needed
有更多不同宽度的字段,但这应该足以解释问题。
有没有人知道如何将布局与griddata相结合或有其他解决方案。 我想让第二列中的文本字段非常漂亮,而不是直接触摸它们。
这就是它的样子:
感谢您的帮助
答案 0 :(得分:1)
GridData
必须应用于Text
,而不是父亲。所以你必须“触摸”它们:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell();
shell.setText("StackOverflow");
shell.setLayout(new GridLayout(2, false));
new Label(shell, SWT.NONE).setText("name");
Text name = new Text(shell, SWT.BORDER);
name.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
new Label(shell, SWT.NONE).setText("memory");
Text memory = new Text(shell, SWT.BORDER);
memory.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
new Label(shell, SWT.NONE).setText("processors");
Text processors = new Text(shell, SWT.BORDER);
processors.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
看起来像这样:
<强>更新强>
好的,再考虑一下你的要求,并想出了另一个解决方案。在此解决方案中,您不必具有对实际Text
对象的引用,但您将搜索它们:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell();
shell.setText("StackOverflow");
shell.setLayout(new GridLayout(2, false));
new Label(shell, SWT.NONE).setText("name");
new Text(shell, SWT.BORDER);
new Label(shell, SWT.NONE).setText("memory");
new Text(shell, SWT.BORDER);
new Label(shell, SWT.NONE).setText("processors");
new Text(shell, SWT.BORDER);
applyGridData(shell);
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
private static void applyGridData(Control parent)
{
if(parent instanceof Text)
{
parent.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
}
else if(parent instanceof Composite)
{
Composite comp = (Composite) parent;
for(Control control : comp.getChildren())
applyGridData(control);
}
}
基本上,此解决方案会递归搜索Composite
Text
个对象,然后将GridData
应用于它们。