有详细记录如下代码
final Rectangle bounds = device.getDefaultConfiguration().getBounds();
final Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(
device.getDefaultConfiguration());
bounds.x = screenInsets.left;
bounds.y = screenInsets.top;
bounds.width -= screenInsets.left + screenInsets.right;
bounds.height -= screenInsets.top + screenInsets.bottom;
其中device
是一些有效的GraphicsDevice
,给出了一个设备允许的最大矩形。还有其他一些方法似乎都有缺点。对于 MS Windows 上的主显示器,如果任务栏不自动隐藏,则此方法有效。但是,如果任务栏自动隐藏,则不会。如果我知道如何获得“正确”的大小,或者在最坏的情况下如何确定任务栏何时自动隐藏,然后跳过这部分测试,我可以在单元测试中允许这样做。谷歌搜索和 Stackoverflowing 没有帮助。我知道有人可以,我提前感谢您!
一如既往...
最佳答案
如果我理解正确的话Full-Screen Exclusive Mode ,那么您的窗口覆盖了所有屏幕尺寸,包括 Windows 任务栏(自动隐藏)所需的区域,我不知道在所有情况下如何确定 Windows 任务栏#HEIGHT 的正确方法,因为这些高度也取决于应用主题,或不取决于
1)(非常丑陋的方式)让显示屏底部留出一些空白,
2) 将应用程序窗口更改为 JFrame
,然后任务栏覆盖 JFrame
的底部,但您必须丢失 FullScreenExclusiveMode,这与其他窗口一样
3) 将应用程序窗口更改为未修饰的 JDialog
或 JWindow (默认未修饰,但 JFrame 需要存在,当然永远不可见,只是需要作为父级)
注意:尽量避免使用JDialog#setModal(true) ,因为任务栏将再次不可访问,但在这种情况下您可以/必须使用 JDialog#setModalityType ,类似于模拟FullScreenExclusiveMode,但自动隐藏任务栏可以通过访问并覆盖JDialog的底部,但您的窗口无法移动到Back()或iconified()
关于java - 自动隐藏任务栏和最大屏幕空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7348960/