充分记录了如下代码
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 Taskbar#HEIGHT的正确方法,因为这些高度是否也取决于应用主题
1)(非常难看)在显示屏底部留出一些空白,
2)将Aplication窗口更改为JFrame
,然后TaskBar覆盖JFrame
的底部,但是您必须丢失FullScreenExclusiveMode,该窗口与其他窗口一样
3)将Aplication窗口更改为未装饰的JDialog
或JWindow(通过defalut进行未装饰,但对于JFrame是必需的,请确保从不可见,仅作为父项需要)
注意:请尽量避免使用JDialog#setModal(true),因为TaskBar将再次无法使用,但在这种情况下,您可以(必须)使用JDialog#setModalityType来模拟FullScreenExclusiveMode,但是Auto-Hide TaskBar可以通过使用和覆盖JDialog的底部,但是您的窗口无法移至Back()或iconified()