Java,获取当前屏幕的窗口边界

Posted

技术标签:

【中文标题】Java,获取当前屏幕的窗口边界【英文标题】:Java, get Window Bounds for current screen 【发布时间】:2021-01-03 03:13:47 【问题描述】:

我正在使用两台分辨率不同的显示器。这将返回我的组件所在的显示:

DisplayMode dm = invoker.getGraphicsConfiguration().getDevice().getDisplayMode();

这会返回屏幕的窗口边界,包括任务栏:

Rectangle windowBounds = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();

问题是第二行代码总是返回主屏幕边界,但是当我的组件位于第二个屏幕上时,我想获得辅助屏幕边界。有没有办法结合这两行来获取当前的屏幕窗口边界?

dm 具有当前屏幕的 getHeight() 和 getWidth(),但它们不考虑 Windows 任务栏。

【问题讨论】:

我已经编写 Java GUI 近 2 年了,从来不需要屏幕大小。为什么你的应用需要它?另见What is the XY problem? @AndrewThompson 我有一个用 show() 方法放置的 JPopMenu。当调用者离 Windows 任务栏太近时,JPopMenu 将绘制在任务栏下方。我已经使用this 解决方案来偏移 y 位置,并且它有效,但是如果您有两个分辨率不同的显示器,即使 JPopMenu 和调用程序在第二个显示器上,GraphicEnviroment 仍然使用主显示器的大小值。跨度> 【参考方案1】:

据我所知,您希望获取当前设备的屏幕尺寸,以便个性化您的应用程序尺寸。 您可以使用 Java Toolkit 类来做到这一点。

首先获取并存储屏幕尺寸:

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

然后将屏幕的宽度和高度以整数形式存储:

// screen size width
int screenWidth = screenSize.getWidth;
// screen size height
int screenHeight = screenSize.getHeight;

将宽度和高度存储为整数后,您可以像使用其他原始变量一样使用和比较它们。

【讨论】:

以上是关于Java,获取当前屏幕的窗口边界的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 WinUI 3 桌面应用程序的屏幕边界?

如何获得最小化窗口的恢复边界?

为啥鼠标不能超过电脑屏幕的左,上边界,而能够超过

在线性问题中定义多个约束后,获取当前可能接受的变量边界

给定字体pt大小和dpi屏幕分辨率的Java2d / AWT文本呈现奇怪的大小/边界?

html 获取当前用户空间中所有包含的图形元素的几何的边界框。