充分记录了如下代码

    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()

10-04 21:25