经过大量搜索和研究,我找不到任何答案。我将非常感谢可以帮助我的人。
在 SWT java 中,我希望我的窗口不能调整大小,所以我这样定义它:
shell = new Shell(SWT.CLOSE | SWT.TITLE | SWT.MIN);
但后来我想将其更改为可调整大小(例如在我单击按钮后)。如何动态更改外壳的样式?
一旦它被创建,你就不能改变它的样式,Shell
所以你不能直接这样做。
您可以做的是创建一个Shell
具有所需样式的新(及其所有内容)并将其边界设置为与旧外壳相同Shell
,然后关闭旧外壳。当 Eclipse 想要将工具提示窗口转换为普通窗口时,它会执行此操作。
如果您专门为 windows 开发,您可以使用非纯 SWT 代码(不可移植)来实现这一点。没有明显的故障,重新设置控件没有问题(例如,请参阅此错误)。只有 resizable 属性被改变。这是片段:
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();
}
编辑:使用简单的功能:
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;
}