当前位置: 首页 > 知识库问答 >
问题:

JWindow/JFrame与Java中的可视屏幕右对齐

樊宏义
2023-03-14

在构造新的JWindow或JFrame时,是否可以将窗口的边缘向右对齐到监视器的可见边缘?

这将用于具有多个监视器的Windows系统。理想情况下,我希望有一个新窗口的右边缘对齐右边最屏幕的右边缘。目前,我正在通过获取图形设备、排序、比较点位置+窗口大小和调整位置来在显示前“移动”窗口,如果我检测到窗口的右边缘是否超出了可见屏幕区域的范围。我在发现这个问题之前做了这件事,这个问题基本上是相同的想法(如何知道在多屏幕环境中JFrame是否在屏幕上)。这就完成了目标。我知道SSCE广告商希望我发布我已经在做的事情,如果感兴趣,另一个问题已经有了一个,但我的意图是问是否有一个更简单/更原生的方法来获得这些结果?顺便说一句,第一次调用需要2.6ms,每次附加调用需要0.066ms。最初我的纳秒到毫秒的数学是错误的,所以性能现在不是一个因素,但我仍然好奇是否有更好的方法来做到这一点。

Last Monitor Rectangle: java.awt.Rectangle[x=1920,y=150,width=1680,height=1050]
Point to compare : java.awt.Point[x=20,y=100], windowWidth:1270
rightBoundOfMonitor : 3600.0
rightBoundOfNewWindow : 1290.0
In bounds
Adjustment time : 2536893ns,  2.536893ms
Last Monitor Rectangle: java.awt.Rectangle[x=1920,y=150,width=1680,height=1050]
Point to compare : java.awt.Point[x=20,y=100], windowWidth:1270
rightBoundOfMonitor : 3600.0
rightBoundOfNewWindow : 1290.0
In bounds
Adjustment time : 65880ns,  0.06588ms
Last Monitor Rectangle: java.awt.Rectangle[x=1920,y=150,width=1680,height=1050]
Point to compare : java.awt.Point[x=3147,y=315], windowWidth:1270
rightBoundOfMonitor : 3600.0
rightBoundOfNewWindow : 4417.0
Out of bounds
Adjustment time : 152949ns,  0.152949ms

共有1个答案

乜元魁
2023-03-14

为了参考,您可以将您的方法与这个更简单的示例进行比较,该示例将一个框架钉在默认屏幕的右下角。目标是确定在graphicsdevice列表中循环的哪一部分所花费的时间占主导地位。我怀疑Rectangle#getBounds()是否重要,但GraphicsDevice#getDefaultConfiguration()可能重要。顶级容器由主机平台拥有,主机平台通常必须强制执行与Swing相同的单线程规则,因此您可能无能为力。

 类似资料:
  • 我想知道如何在JFrame中更改屏幕。例如,从起始屏幕更改为不同的屏幕。因此,在一个屏幕上有各种按钮、标签、树等,当用户单击按钮时,会出现不同的布局。 “setVisible(false)和setVisible(true)”会起作用吗?

  • 问题内容: 我将很快进行一个项目,并且必须在其中使用全屏模式。 它将在窗口中绘制一些图形。如果我使用JFrame或类似的东西,那会很方便。 我不知道屏幕的最终分辨率是多少。请告诉我图形是否会自动缩放? 问题答案:

  • 我将很快做一个项目,我将不得不在它使用全屏模式。 它会在窗口中绘制一些图形。如果我使用JFrame或类似的东西会很方便。 我不知道屏幕的最终分辨率会是多少。请告诉我图形是否会自动重新缩放?

  • 问题内容: 我有一个双监视器配置,如果找到它,我想在特定的监视器中运行我的GUI。我试图创建一个通过屏幕设备对象的窗口,但是它不起作用,框架仍显示在主屏幕上。 如何设置必须显示框架的屏幕? 问题答案:

  • 问题内容: 我使用myEclipse Matisse创建了Java GUI。当我的屏幕分辨率为1024x768时,它可以正常工作,但是当我更改分辨率时,我的GUI无法正常工作。我希望我的GUI窗口应根据屏幕分辨率重新调整大小,我正在扩展JFrame以创建主窗口。 这是行不通的,我该怎么做,设置硬编码的大小或使用ToolKit使用的帧大小保持不变。 问题答案: 您正在呼叫,它会更改框架大小,以便恰好

  • 问题内容: 我想找出一个如何使用Java捕获截屏视频。我知道使用Robot类可以获取屏幕截图,但是如何将其捕获为视频并将其上传到服务器呢?那将如何工作? 想法? 问题答案: 使用纯Java解决方案,我怀疑它是否会起作用,但这当然取决于您对“视频”的解释。 在分辨率为1920x1200的台式机上,使用Java Robot捕获整个屏幕时,每秒可以获取约20帧。由于每个图像都包含> 6 MB的未压缩数据