Java SWT:如何将窗口设置为可调整大小\不可随时调整大小?

时间:2013-11-09 10:51:15

标签: java shell resize window swt

经过大量的搜索和研究,我找不到任何答案。 我非常感谢能帮助我的人。

在SWT java中, 我希望我的窗口不可调整大小,所以我这样定义:

shell = new Shell(SWT.CLOSE | SWT.TITLE | SWT.MIN);

但后来我想将其更改为可调整大小(例如在我点击按钮后)。 如何在运行中更改shell的样式?

2 个答案:

答案 0 :(得分:2)

创建后,您无法更改Shell的样式,因此无法直接执行此操作。

您可以做的是创建一个具有所需样式的新Shell(及其所有内容),并将其边界设置为与旧Shell相同,然后关闭旧shell。 Eclipse在想要将工具提示窗口转换为普通窗口时执行此操作。

答案 1 :(得分:1)

如果您专门为Windows开发,则可以使用非纯SWT代码(非便携式)实现此目的。没有可见的故障,重新设置控件没有问题(例如,请参阅this bug)。只有可调整大小的属性才会更改。这是片段:

public static void main(String[] args) {
    final Display display = new Display();
    Shell shell = new Shell(display);

    final int style = OS.GetWindowLong(shell.handle, OS.GWL_STYLE);
    OS.SetWindowLong(shell.handle, OS.GWL_STYLE, style & ~0x00040000);

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

WS_SIZEBOX = 0x00040000L

编辑: 简单的使用功能:

private static final int WS_SIZEBOX = 0x00040000;

public static void setResizable(Shell shell, boolean resizable) {
    final int style = OS.GetWindowLong(shell.handle, OS.GWL_STYLE);
    final int newStyle = resizable ? style | WS_SIZEBOX : style & ~WS_SIZEBOX;
    OS.SetWindowLong(shell.handle, OS.GWL_STYLE, newStyle);
}

public static boolean isResizable(Shell shell) {
    final int style = OS.GetWindowLong(shell.handle, OS.GWL_STYLE);
    return (style & WS_SIZEBOX) != 0;
}