2013-07-29 45 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

相關問題