2016-09-29 3 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

私は、アプリケーション内のサイドメニューを組み込むために、この追加を行いました。ご覧のとおり、スタックペインにシーン全体をラップし、サイドメニューの外部アンカーペインでアンカーペイン(階層を参照)をラップしました。 2つの異なるMacで最小限に抑えられて消えてしまうところで、まったく同じことが起こっています.Windowsは完璧です。

レイアウトや舞台設定の中には、メインシーンをラップした後にしか起こらなかったものや、誰かがこの問題を抱えているか、それを修正する方法を知っている人がいますか?

+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

関連する問題