2016-12-13 91 views
1

我有一個通常在雙顯示器設置上運行的應用程序。我還保存當前窗口的大小和位置,並在啓動應用程序時再次加載。如何確保應用程序窗口在啓動時可見?

我的問題來自其中一個顯示器被移除或分辨率改變的情況。如果我保存窗口的x和y位置,並且它現在不存在監視器上最後可見,則在程序再次啓動時它不在視圖中。

下面是我用我的Main.java代碼:

double x = Settings.getWindowX(); 
double y = Settings.getWindowY(); 
double h = Settings.getWindowH(); 
double w = Settings.getWindowW(); 

primaryStage.setScene(mainScene); 
primaryStage.setX(x); 
primaryStage.setY(y); 
primaryStage.setWidth(w); 
primaryStage.setHeight(h); 

我的目標是檢查窗口是可用的顯示器的可視範圍內,如果沒有,重置X, y到100,100。

我不確定從哪裏開始。

+0

小挑剔:它的「保證」不「保險」 – Travis

+0

我總是得到這些混合起來。感謝您花時間指出:)它已被糾正。 – Zephyr

+0

@Travis在英國英語中,這只是真的,我想;在美國英語[「保險」](https://en.wiktionary.org/wiki/insure)(也[這裏](https://www.merriam-webster.com/dictionary/insure))被視爲有效「確保」的替代拼寫(雖然我實際上不喜歡在這個意義上的「保險」)。 –

回答

2

Screen API允許您檢查您擁有的值是否位於當前配置的範圍內。

E.g.測試是否存在物理圖形設備相交保存在配置設置的界限,你可以這樣做:

double x = Settings.getWindowX(); 
double y = Settings.getWindowY(); 
double h = Settings.getWindowH(); 
double w = Settings.getWindowW(); 

primaryStage.setScene(mainScene); 

if (Screen.getScreensForRectangle(x, y, w, h).isEmpty()) { 

    // no screen intersects saved values... 
    // just center on primary screen: 

    primaryStage.centerOnScreen(); 

} else {  

    primaryStage.setX(x); 
    primaryStage.setY(y); 
    primaryStage.setWidth(w); 
    primaryStage.setHeight(h); 

} 
+0

謝謝James_D。這就是訣竅! – Zephyr

相關問題