gpt4 book ai didi

java - 如何在多屏幕环境中知道 JFrame 是否在屏幕上

转载 作者:行者123 更新时间:2023-12-02 01:11:09 25 4
gpt4 key购买 nike

我的应用程序用于多屏幕环境。应用程序在关闭时存储其位置并从最后一个位置开始。
我通过调用frame.getLocation()获取位置如果框架位于主屏幕上或位于主屏幕的右侧,这会给我一个正值。位于主屏幕左侧屏幕上的框架的 X 值为负。
当屏幕配置发生变化时(例如,多个用户共享一个 Citrix 帐户并具有不同的屏幕分辨率),就会出现问题。

我现在的问题是确定存储的位置在屏幕上是否可见。根据其他一些帖子,我应该使用 GraphicsEnvironment 来获取可用屏幕的大小,但我无法获取不同屏幕的位置。

示例:getLocation() 给出 Point(-250,10)
GraphicsEnvironment 给出
设备1宽度:1920
设备2宽度:1280

现在,根据屏幕的顺序(辅助显示器放置在主显示器的左侧还是右侧),框架可能可见,也可能不可见。

你能告诉我如何解决这个问题吗?

非常感谢

最佳答案

这是一个小补充,但是,如果您想知道框架是否在屏幕上可见,您可以计算桌面的“虚拟”边界并测试框架是否包含在其中。

public class ScreenCheck {

public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setBounds(-200, -200, 200, 200);
Rectangle virtualBounds = getVirtualBounds();

System.out.println(virtualBounds.contains(frame.getBounds()));

}

public static Rectangle getVirtualBounds() {
Rectangle bounds = new Rectangle(0, 0, 0, 0);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice lstGDs[] = ge.getScreenDevices();
for (GraphicsDevice gd : lstGDs) {
bounds.add(gd.getDefaultConfiguration().getBounds());
}
return bounds;
}
}

现在,它使用框架的矩形,但您也可以使用它的位置。

同样,您可以单独使用每个 GraphicsDevice 并依次检查每个...

关于java - 如何在多屏幕环境中知道 JFrame 是否在屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18350950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com