GraphicsConfiguration.getDevice()返回错误的Monitor ID

时间:2013-07-29 05:22:05

标签: java swing graphics multiple-monitors

我必须维护遗留应用程序的奇怪行为。启动时,应用程序的JFrame将移动到最近关闭的位置(即使在多显示器设置下也能正常工作)。
将JFrame移动到辅助监视器(通过调用setLocation(x, y)完成)并在调用setRelativeTo(mainFrame)后显示JDialog时,JDialog将出现在主监视器上。

必须将主机拖动到主监视器上并返回辅助监视器以避免问题。

我发现,当应用程序启动时,调用mainFrame.getGraphicsConfiguration().getDevice().getIDstring()会返回\ Display0(意味着'主要显示'afaik),即使它显示在辅助监视器上。当我将主框架拖动到主监视器并返回到辅助监视器时,方法返回\ Display1。

现在我有两个问题:

  1. 有没有办法告诉应用程序它所在的监视器?
  2. 我试图用JFrame和JDialog创建一个简单的例子。不幸的是,它表现得像预期的那样,我无法重现这个问题。您是否有关于我的应用程序中要查找的内容的提示,这可能会导致此行为?
  3. 非常感谢你 klib

2 个答案:

答案 0 :(得分:2)

关于第一个问题,您可以使用JFrame(GraphicsConfiguration)

如果问题不可重复,可能会有其他事情搞砸了

答案 1 :(得分:2)

经过一些研究后,我发现我必须再次致电mainframe.setVisible(false);mainframe.setvisible(true); 这足以使mainframe.getGuiConfiguration.getDevice()返回正确的设备ID。

我知道,这不是原始问题的真正解决方案,但如果其他人经历相同的行为,它可能会有所帮助。

无论如何,对此问题的解释/真正解决方案仍然非常感激。