Java 为什么SWT列表会填充所有组合?

Java 为什么SWT列表会填充所有组合?,java,layout,swt,Java,Layout,Swt,您好,我有一个SWT布局的问题,我想创建一个应用程序与4个相同大小的列表。当列表为空时,每个列表看起来都很好,但是当我使用覆盖整个组合的数据来完成其中一个列表时 和包含数据的列表: 我知道它的布局是错误的,所以我将向您展示一些来源: shlPirotechnikafcwnxrap.setLayout(new FillLayout(SWT.HORIZONTAL)); ...... Composite mainComposite = new Composite(shlPirotechnika

您好,我有一个SWT布局的问题,我想创建一个应用程序与4个相同大小的列表。当列表为空时,每个列表看起来都很好,但是当我使用覆盖整个组合的数据来完成其中一个列表时

和包含数据的列表:

我知道它的布局是错误的,所以我将向您展示一些来源:

shlPirotechnikafcwnxrap.setLayout(new FillLayout(SWT.HORIZONTAL));

......

Composite mainComposite = new Composite(shlPirotechnikafcwnxrap,
                SWT.NONE);
        mainComposite.setLayout(new FormLayout());

......

    Composite rightCenterComposite = new Composite(mainComposite, SWT.NONE);
        rightCenterComposite.setLayoutData(new FormData());
        rightCenterComposite.setLayout(new GridLayout());
        rightCenterComposite.setLayoutData(GUIHelper.getFormData(5, 100, 30, 100));

        TabFolder tabFolder = new TabFolder(rightCenterComposite, SWT.NONE);
        tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        /**
         * TAB ITEM
         */
        TabItem tbtmSql = new TabItem(tabFolder, SWT.NONE);
        tbtmSql.setText("SQL");

        /**
         * Composite inside TabItem
         */
        Composite sqlTabComposite = new Composite(tabFolder, SWT.NONE);
        GridLayout gl_sqlTabComposite = new GridLayout();
        gl_sqlTabComposite.makeColumnsEqualWidth = true;
        gl_sqlTabComposite.numColumns = 2;
        sqlTabComposite.setLayout(gl_sqlTabComposite);
        sqlTabComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        tbtmSql.setControl(sqlTabComposite);

        Group grpSowaKluczoweSql = new Group(sqlTabComposite, SWT.NONE);
        grpSowaKluczoweSql.setLayout(new FormLayout());
        grpSowaKluczoweSql.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        grpSowaKluczoweSql.setText("S\u0142owa kluczowe i operatory SQL:");

        List listSlowaKluczoweSql = new List(grpSowaKluczoweSql, SWT.BORDER | SWT.V_SCROLL);
        listSlowaKluczoweSql.setLayoutData(new FormData());
        listSlowaKluczoweSql.setLayoutData(GUIHelper.getFormData(0, 100, 0, 100));

        Group grpTabele = new Group(sqlTabComposite, SWT.NONE);
        grpTabele.setLayout(new FormLayout());
        grpTabele.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
        grpTabele.setText("Nazwy tabel:");

        List listTabele = new List(grpTabele, SWT.BORDER | SWT.V_SCROLL);
        listTabele.setLayoutData(new FormData());
        listTabele.setLayoutData(GUIHelper.getFormData(0, 100, 0, 100));

这是因为:
sqlTabComposite.setLayoutData(新的GridData(SWT.FILL,SWT.FILL,true,true))
您正在使用
填充
+获取多余空间。尝试使用适当的布局常量,如水平对齐时使用
开始
,垂直对齐时使用
顶部
。同时将
grabeExcessVerticalSpace
设置为false。检查所有相关位置。

我尝试了您的解决方案,效果不错,但我也想在调整窗口大小后保留组件的比例。这就是在窗口调整大小时调整组件的大小,反之亦然。请尝试添加一个调整大小的侦听器并相应地调整控件?问题已解决,我已使用
FormData
将布局更改为
FormLayout
。谢谢你抽出时间。