0

複数のコンポジットが垂直に配置された 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各子の一番上のアタッチメントを前のものに設定する列でした。どちらもまったく同じ結果を示しました。

私が間違っていることを誰かが知っていますか?

4

1 に答える 1

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);
于 2013-04-04T19:35:41.427 に答える