自动隐藏任务栏和最大屏幕空间

时间:2011-09-08 13:38:34

标签: java swing

如下所示代码

    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没有帮助。我知道有人可以提前感谢你!

永远......

1 个答案:

答案 0 :(得分:1)

如果我理解正确Full-Screen Exclusive Mode,那么你的窗口覆盖了所有的屏幕大小,包括Windows任务栏所需的区域(自动隐藏),我不知道如何确定Windows任务栏#HEIGHT的正确方法因为这些高度也取决于应用主题,或者不是

1)(非常丑陋的方式)让显示器底部有一些空白区域,

2)将Aplication窗口更改为JFrame,然后将TaskBar覆盖到JFrame的底部,但是您必须丢失FullScreenExclusiveMode,该窗口与其他任何窗口一样

3)将Aplication窗口更改为未装饰的JDialog或JWindow(由defalut取消装饰,但JFrame需要存在,确定永远不可见,只需要作为父级) 注意:尽量避免使用JDialog#setModal(true),因为TaskBar将再次不可访问,但在这种情况下,您可以/必须使用JDialog#setModalityType,准模拟FullScreenExclusiveMode,但自动隐藏任务栏可以通过JDialog的可访问和覆盖底部,但您的窗口无法移动到Back()或iconified()