java - Swt 调整 Composite 大小但不调整窗口大小

标签 java swt

我正在尝试更改组合的大小。 我用以下方法做到这一点。

GridData gd = (GridData)parent_.getLayoutData();
gd.heightHint = (int)(parent_.getSize().y / 1.73);

因此,当执行某个操作时,我想调整该组件的大小并使其更小。然而,在调用之后我必须做 getShell().pack();每当我这样做时,会发生的情况是组件所在的整个窗口在垂直方向上占用的空间与屏幕上可用的空间一样多。知道如何防止窗口这样做吗?我真的不擅长 swt,如果你能给我指出正确的方向,我也很喜欢一些教程。

最佳答案

您不必调用pack()更改 GridData 后,调用 layout()关于Shell就足够了:

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

    final Composite resizable = new Composite(shell, SWT.BORDER);
    new Label(resizable, SWT.NONE).setText("Content");

    final GridData data = new GridData(SWT.FILL, SWT.BEGINNING, true, true);
    data.heightHint = 200;

    resizable.setLayoutData(data);

    Button button = new Button(shell, SWT.PUSH);
    button.setText("Resize");
    button.addListener(SWT.Selection, new Listener()
    {
        @Override
        public void handleEvent(Event arg0)
        {
            data.heightHint /= 2;
            shell.layout();
        }
    });

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

按下按钮之前:

enter image description here

按下按钮后:

enter image description here

<小时/>

至于教程:

关于java - Swt 调整 Composite 大小但不调整窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18336477/

相关文章:

java - Spy对象值不随when改变,thenReturn

java - 是否可以在创建 JWindow 后将其父级设置为 JWindow?

java - 如何在swt组合框中显示最大数量的数据?

java - ElementListSelectionDialog 没有元素

java - 当我与自定义 SWT 组件交互时它会闪烁

java - 使用 Maven 在 OSX 上出现 SWT 错误

java - Mars MIPS 模拟器无法运行,安装有问题吗?

java - 堆外内存和栈内存是一样的吗?

java - NatTable 混合固定宽度列和可调整大小的填充剩余空间

java - 是否通过代码转换大型 json 文件