Java 设置GridLayout列的宽度

Java 设置GridLayout列的宽度,java,layout,eclipse-plugin,swt,eclipse-rcp,Java,Layout,Eclipse Plugin,Swt,Eclipse Rcp,我有一个GridLayout在一个Composite里面,我有两列在里面。我希望列宽为Shell宽度的75%和25%。怎么做 好的,现在开始:使用GridData#widthHint值强制组合的某个宽度。根据外壳的宽度计算宽度: public static void main(String[] args) { Display display = Display.getDefault(); final Shell shell = new Shell(display); sh

我有一个
GridLayout
在一个
Composite
里面,我有两列在里面。我希望列宽为
Shell
宽度的75%和25%。怎么做

好的,现在开始:使用
GridData#widthHint
值强制组合的某个宽度。根据
外壳的宽度计算宽度

public static void main(String[] args)
{
    Display display = Display.getDefault();
    final Shell shell = new Shell(display);
    shell.setLayout(new GridLayout(2, false));

    Composite left = new Composite(shell, SWT.BORDER);
    Composite right = new Composite(shell, SWT.BORDER);

    final GridData leftData = new GridData(SWT.FILL, SWT.FILL, true, true);
    final GridData rightData = new GridData(SWT.FILL, SWT.FILL, true, true);

    left.setLayoutData(leftData);
    right.setLayoutData(rightData);

    shell.addListener(SWT.Resize, new Listener()
    {
        @Override
        public void handleEvent(Event arg0)
        {
            Point size = shell.getSize();

            leftData.widthHint = (int) (size.x * 0.75);
            rightData.widthHint = size.x - leftData.widthHint;

            System.out.println(leftData.widthHint + " + " + rightData.widthHint + " = " + size.x);
        }
    });

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

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}
启动后:

调整大小后:


使用
GridLayout
实现这一点并不容易,但还有许多其他
布局。请看一看,特别是关于
FormLayout
的部分。您好,谢谢您的回答。我知道其他布局,但我希望它在网格布局中。原因是当我调整壳/复合结构的大小或将其从右向左(水平)移动时,第二列的宽度保持不变,直到第一列完全折叠。谢谢你的支持。嗨,巴兹,谢谢你的回答。我的回答有点错误。重新调整大小后,第二列的宽度应该不会发生任何变化。假设开始时列宽为400像素,重新调整大小后应保持400,但第一列宽度可能会更改为0,但第二列长度不应更改。谢谢你的帮助。@Jack,你自己换应该很容易,对吧?如果没有,请告诉我,我可以更新我的答案。@Baz感谢您的时间和回复。我得到了它。