如何通过代码实现org.lwjgl.opengl.Display窗口最大化(非全屏)
LWJGL Display 非全屏最大化实现方案
要实现保留任务栏和窗口标题栏的非全屏最大化,不能直接使用Display.getDesktopDisplayMode()的高度(它包含了任务栏占用的空间),你需要获取系统工作区的尺寸——也就是桌面减去任务栏等系统UI后的可用区域。
LWJGL的Display类没有直接提供这个能力,需要借助Java AWT来获取系统工作区参数,具体步骤如下:
1. 获取系统工作区尺寸
使用AWT的GraphicsEnvironment和GraphicsDevice获取主屏幕的有效工作区域:
import java.awt.GraphicsEnvironment; import java.awt.Rectangle; // 获取主屏幕的工作区边界(已扣除任务栏等系统UI) GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); Rectangle workArea = ge.getMaximumWindowBounds();
这里的workArea.width和workArea.height就是符合需求的窗口最大化尺寸。
2. 应用到LWJGL窗口
拿到尺寸后,配置Display并创建窗口:
// 先开启窗口可调整大小(确保手动调整和最大化按钮正常工作) Display.setResizable(true); // 设置为工作区尺寸 Display.setDisplayMode(new DisplayMode(workArea.width, workArea.height)); // 创建窗口 Display.create();
注意事项
- AWT是JDK自带的类库,无需额外引入依赖
- 多屏幕环境下,
getMaximumWindowBounds()默认返回主屏幕的工作区,若要针对其他屏幕,可通过ge.getScreenDevices()遍历选择对应的GraphicsDevice,再调用其getDefaultConfiguration().getBounds()获取该屏幕的工作区
内容的提问来源于stack exchange,提问作者Sevoos
相关产品推荐
相关产品推荐

