2013-07-29 28 views
3

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

必须将主显示器上的大型机拖动到辅助显示器上,以避免出现问题。

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

现在我有2个问题:GraphicsConfiguration.getDevice()返回错误的显示器ID

  1. 有没有办法告诉哪个监视它位于应用程序?
  2. 我试图用JFrame和JDialog创建一个简单的例子。不幸的是,它的行为如预期,我不能重现这个问题。你有什么暗示在我的应用程序中寻找,可能会导致此行为?

非常感谢您
klib

+0

希望这[线程](http://stackoverflow.com/q/14273836/1057230),可能能够帮助一些问题:-)不要看OP的答案,我想这可以帮助一个位。 –

回答

2

一些更多的研究,我发现,我不得不打电话mainframe.setVisible(false);并再次mainframe.setvisible(true);后。
这足以让mainframe.getGuiConfiguration.getDevice()返回正确的设备ID。

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

无论如何,该问题的解释/真正的解决方案仍然非常赞赏。

2

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

如果问题是不可重复的,有可能是别的事情上是搞乱东西

+0

这听起来像个好主意,但不幸的是,JFrame会将自己移动到所需位置,因此该对象在移动时已经创建。改变这将是很多工作,并可能在别处造成麻烦(正如我所提到的,这是一个我现在必须维护的遗留应用程序) – klib009

+0

如果它在创建框架代码中,它应该是相对安全的。 'setLocationRelativeTo'似乎使用框架的图形配置。您需要确定哪个GC将使用所需的位置,并将其作为主GC传递... – MadProgrammer

+0

嗯..除了施工时,我如何将'GraphicsConfiguration'传递给JFrame?我认为这是不可能的。 – klib009

相关问题