2016-09-29 31 views
2

在構建這個應用程序時偶然遇到這個問題,現在真的阻礙了我們的功能。某些JavaFX佈局是否與Mac電腦不兼容?

Screen screen = Screen.getPrimary(); 
     Rectangle2D bounds = screen.getVisualBounds(); 
     overallStage.setX(bounds.getMinX()); 
     overallStage.setY(bounds.getMinY()); 
     overallStage.setWidth(bounds.getWidth()); 
     overallStage.setHeight(bounds.getHeight()); 

這是允許在用戶登錄之後,屏幕的最大化:這個問題首先在我的其他開發人員(使用MAC)試圖運行應用程序時,我改變影響舞臺上的一行代碼開始。在mac用戶登錄後,舞臺將最小化爲左下角的一個小窗口,然後消失。現在有一件類似的事情正在發生,我做了一個新的添加。

enter image description here

我做了這個除了在應用程序中包含一個側面菜單。正如你所看到的,我將整個場景包裝在一個堆疊窗格中,然後用側邊菜單的外部錨點窗格將錨定窗格(參見層次結構)包裹起來。現在完全一樣的事情發生在兩個不同的Mac上最小化和消失的地方,Windows非常好。

有什麼東西導致我相信一些佈局和舞臺設置與Mac電腦兼容它後,我裹在主場景只發生一次,有沒有人遇到此問題或不知道如何解決它?

+0

非常好的問題! – Milan

+0

實際的佈局代碼是用Java編寫的,所以它應該做的任何系統(至少如果系統運行相同的JDK版本)同樣的事情。該'Screen' API('Screen.getPrimary()'和'screen.getVisualBounds()')顯然必須與本地系統進行通信,並可能做一些座標變換。你能記錄你在不同系統上屏幕邊界獲得的值嗎?每個系統運行哪個JDK版本?在Mac上,一些較早的JDK版本有將本地屏幕座標轉換爲JavaFX使用的座標系的錯誤。 –

回答

1

當設定值的階段,你應該:

//Initialize Group root for Main Node 
    Group root = new Group(); 

    //Initialize Scene on group root with specific sizes 
    Scene scene = new Scene(root, 450, 250); 

    //Initialize BorderPane and Bind the layout with the scene size. 
    BorderPane borderPane = new BorderPane(); 
    borderPane.prefHeightProperty().bind(scene.heightProperty()); 
    borderPane.prefWidthProperty().bind(scene.widthProperty()); 

    //Set the TabPane to be centered 
    borderPane.setCenter(tabPane); 

    //Adds Layout to Main Node 
    root.getChildren().add(borderPane); 

這會自動根據屏幕的旁邊所有控件的分辨率改變窗口大小。因此,允許您使JavaFX與所有操作系統兼容。

GoodLuck。讓我知道你是否想要進一步的幫助。 :)

+0

完美的作品!謝謝 – Philayyy