Java SWT网格布局宽度

Java SWT网格布局宽度,java,swt,Java,Swt,我正在尝试使用SWT创建一个简单的显示。到目前为止,我成功地显示了数据库中的信息,并使用RowLayout显示它,每一行都包含一个GridLayout。看起来是这样的: 我真正想要的是让这些行延伸到整个窗口的宽度。我如何做到这一点 谢谢你的帮助 实现这一点的通常方法是使用。该GridData告诉组件如何在其父级中运行,例如如何在父级中传播 通过使用: component.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, fals

我正在尝试使用SWT创建一个简单的显示。到目前为止,我成功地显示了数据库中的信息,并使用RowLayout显示它,每一行都包含一个GridLayout。看起来是这样的:

我真正想要的是让这些行延伸到整个窗口的宽度。我如何做到这一点


谢谢你的帮助

实现这一点的通常方法是使用。该
GridData
告诉组件如何在其父级中运行,例如如何在父级中传播

通过使用:

component.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
您可以告诉组件在水平方向上占用尽可能多的空间,但在垂直方向上只占用必要的空间

下面是一个小示例,它应该按照您期望的方式运行:

public class StackOverflow
{
    public static void main(String[] args)
    {
        Display display = Display.getDefault();
        Shell shell = new Shell(display);

        /* GridLayout for the Shell to make things easier */
        shell.setLayout(new GridLayout(1, false));

        for(int i = 0; i < 5; i++)
        {
            createRow(shell, i);
        }

        shell.pack();
        shell.open();

        while (!shell.isDisposed())
        {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

    private static void createRow(Shell shell, int i)
    {
        /* GridLayout for the rows, two columns, equal column width */
        Composite row = new Composite(shell, SWT.NONE);
        row.setLayout(new GridLayout(2, true));

        /* Make each row expand horizontally but not vertically */
        row.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

        /* Create the content of the row, expand horizontally as well */
        Button first = new Button(row, SWT.PUSH);
        first.setText("FIRST " + i);
        first.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
        Button second = new Button(row, SWT.PUSH);
        second.setText("SECOND " + i);
        second.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
    }
}
公共类堆栈溢出
{
公共静态void main(字符串[]args)
{
Display=Display.getDefault();
外壳=新外壳(显示);
/*Shell的GridLayout使事情变得更简单*/
shell.setLayout(新的GridLayout(1,false));
对于(int i=0;i<5;i++)
{
createRow(shell,i);
}
shell.pack();
shell.open();
而(!shell.isDisposed())
{
如果(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
私有静态void createRow(Shell,int i)
{
/*行、两列、相等列宽的网格布局*/
复合材料行=新复合材料(外壳,SWT.NONE);
row.setLayout(新的GridLayout(2,true));
/*使每行水平展开,而不是垂直展开*/
setLayoutData(新的GridData(SWT.FILL、SWT.beging、true、false));
/*创建行的内容,并水平展开*/
按钮优先=新按钮(行,SWT.PUSH);
first.setText(“first”+i);
首先,setLayoutData(新的GridData(SWT.FILL,SWT.beging,true,false));
按钮秒=新按钮(行,SWT.PUSH);
second.setText(“second”+i);
setLayoutData(新的GridData(SWT.FILL,SWT.start,true,false));
}
}
这是启动后的样子:

调整大小后:



附带说明:如果您还没有阅读过Eclipse中关于布局的教程,我建议您阅读该教程。每个SWT开发人员都应该读过它。

实现这一点的通常方法是使用。该
GridData
告诉组件如何在其父级中运行,例如如何在父级中传播

通过使用:

component.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
您可以告诉组件在水平方向上占用尽可能多的空间,但在垂直方向上只占用必要的空间

下面是一个小示例,它应该按照您期望的方式运行:

public class StackOverflow
{
    public static void main(String[] args)
    {
        Display display = Display.getDefault();
        Shell shell = new Shell(display);

        /* GridLayout for the Shell to make things easier */
        shell.setLayout(new GridLayout(1, false));

        for(int i = 0; i < 5; i++)
        {
            createRow(shell, i);
        }

        shell.pack();
        shell.open();

        while (!shell.isDisposed())
        {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

    private static void createRow(Shell shell, int i)
    {
        /* GridLayout for the rows, two columns, equal column width */
        Composite row = new Composite(shell, SWT.NONE);
        row.setLayout(new GridLayout(2, true));

        /* Make each row expand horizontally but not vertically */
        row.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

        /* Create the content of the row, expand horizontally as well */
        Button first = new Button(row, SWT.PUSH);
        first.setText("FIRST " + i);
        first.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
        Button second = new Button(row, SWT.PUSH);
        second.setText("SECOND " + i);
        second.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
    }
}
公共类堆栈溢出
{
公共静态void main(字符串[]args)
{
Display=Display.getDefault();
外壳=新外壳(显示);
/*Shell的GridLayout使事情变得更简单*/
shell.setLayout(新的GridLayout(1,false));
对于(int i=0;i<5;i++)
{
createRow(shell,i);
}
shell.pack();
shell.open();
而(!shell.isDisposed())
{
如果(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
私有静态void createRow(Shell,int i)
{
/*行、两列、相等列宽的网格布局*/
复合材料行=新复合材料(外壳,SWT.NONE);
row.setLayout(新的GridLayout(2,true));
/*使每行水平展开,而不是垂直展开*/
setLayoutData(新的GridData(SWT.FILL、SWT.beging、true、false));
/*创建行的内容,并水平展开*/
按钮优先=新按钮(行,SWT.PUSH);
first.setText(“first”+i);
首先,setLayoutData(新的GridData(SWT.FILL,SWT.beging,true,false));
按钮秒=新按钮(行,SWT.PUSH);
second.setText(“second”+i);
setLayoutData(新的GridData(SWT.FILL,SWT.start,true,false));
}
}
这是启动后的样子:

调整大小后:



附带说明:如果您还没有阅读过Eclipse中关于布局的教程,我建议您阅读该教程。每个SWT开发人员都应该阅读它。

感谢您的帮助。我如何才能获得相同的功能,但列的大小不同?我使用嵌套的gridlayouts来近似我想要的外观。再次感谢。谢谢你的帮助。我如何才能获得相同的功能,但列的大小不同?我使用嵌套的gridlayouts来近似我想要的外观。再次感谢。