我需要一个未修饰的 JFrame(setUndecorated(true)),它需要全屏显示,不与任务栏重叠。
我已经尝试了以下解决方案。
调用 setExtendedState(MAXIMIZED_BOTH)。
- 优势: 这按预期工作正常,即窗口正在动态调整自身,但存在以下问题。
- 问题 最初窗口占据全屏 虽然框架会自行动态调整,但它会与任务栏重叠。
按照 Does JFrame.setExtendedState(MAXIMIZED_BOTH) work with undecorated frames? 中所述尝试了以下解决方案
GraphicsConfiguration config = aFrame.getGraphicsConfiguration(); Rectangle usableBounds = SunGraphicsEnvironment.getUsableBounds(config.getDevice()); aFrame.setBounds(0, 0, usableBounds.width, usableBounds.height);
- 优势: 我没有重叠,窗口看起来很好。
- 问题: 当任务栏位置/大小更改时,窗口不会动态调整自身。
如有任何帮助,我们将不胜感激。
我想到了一个设计。但不确定其可行性。我可以使用 setBounds()。但是当任务栏被调整或重新定位时,我需要通知我的框架。有办法吗?
最佳答案
能够用下面的代码解决上面的问题,
Rectangle usableBounds = SunGraphicsEnvironment.getUsableBounds(config.getDevice());
setMaximizedBounds(usableBounds);
setExtendedState(MAXIMIZED_BOTH);
因此,通过 getUsableBounds
,我能够获得离开任务栏的边界。因此,我正在使用 setExtendedState(MAXIMIZED_BOTH)
当我重新调整任务栏的大小/重新定位时,窗口会自动更新。 :-)
关于java - 设置 JFrame 而不与任务栏重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19632093/