複数のコンポジットが垂直に配置された 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();
}
}
いくつかのコンポジットがループで作成されていることがわかります。問題は、最初の 1 つだけが UI に表示されることです。親には垂直があるため、それらは互いの下に配置されると予想されますRowLayout
。
他のアプローチも試しました。1 つは 1 つの列GridLayout
で、もう1 つはFormLayout
各子の一番上のアタッチメントを前のものに設定する列でした。どちらもまったく同じ結果を示しました。
私が間違っていることを誰かが知っていますか?