我正在尝试构建一个GUI,其中多个复合材料垂直布局。我把我的方法放在一个最小的例子中:
public class LayoutTest {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setSize(400, 300);
shell.setLayout(new FillLayout());
Composite listPanel = new ScrolledComposite(shell, SWT.BORDER
| SWT.V_SCROLL);
listPanel.setLayout(new RowLayout(SWT.VERTICAL));
listPanel.setBackground(Display.getCurrent().getSystemColor(
SWT.COLOR_WHITE));
for (int i = 1; i < 5; i++) {
Composite listElement = new Composite(listPanel, SWT.BORDER);
listElement.setLayout(new RowLayout());
Label label = new Label(listElement, SWT.BORDER);
label.setText(String.valueOf(i) + " foo");
label.setSize(label.computeSize(SWT.DEFAULT, SWT.DEFAULT));
listElement.setSize(label.computeSize(shell.getSize().x,
label.getSize().y));
}
shell.layout(true, true);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
您可以看到某些复合材料是在循环中创建的。问题是只有第一个出现在UI中。我希望它们在彼此之下,因为它的父母有一个垂直RowLayout
。
我也尝试过其他方法。一个是一列GridLayout
,另一个是FormLayout
,其中我将每个孩子的顶部附件设置为前一个。两者都表现出完全相同的结果。
有谁知道我做错了什么?
答案 0 :(得分:1)
你去了:
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
ScrolledComposite listPanel = new ScrolledComposite(shell, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
listPanel.setLayout(new GridLayout(1, false));
Composite child = new Composite(listPanel, SWT.NONE);
child.setLayout(new GridLayout(2, false));
for (int i = 1; i < 10; i++)
{
Button button = new Button(child, SWT.PUSH);
button.setText("lalala");
Label label = new Label(child, SWT.BORDER);
label.setText(i + " foo");
}
Point size = child.computeSize(SWT.DEFAULT, SWT.DEFAULT);
listPanel.setContent(child);
listPanel.setMinSize(size.x, size.y);
listPanel.setExpandHorizontal(true);
listPanel.setExpandVertical(true);
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
缺少的重要部分是:
listPanel.setContent(child);
listPanel.setMinSize(size.x, size.y);
listPanel.setExpandHorizontal(true);
listPanel.setExpandVertical(true);