3

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

必须将主机拖到主监视器上,然后再拖回辅助监视器,以避免出现问题。

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

现在我有两个问题:

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

非常感谢
klib

4

2 回答 2

3

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

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

无论如何,仍然非常感谢对该问题的解释/实际解决方案。

于 2013-07-29T09:02:57.137 回答
2

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

如果问题不可重复,则可能有其他事情正在搞砸

于 2013-07-29T05:25:32.043 回答