2016-09-29 3 views
2

Dieses Problem wurde ein paar Mal beim Erstellen dieser Anwendung verursacht und behindert nun wirklich unsere Funktionalität. Das Problem begann, als meine andere Entwickler (mit einem mac) versucht, unsere Anwendung zu laufen, wenn ich eine Zeile Code auf die Bühne geändert beeinflussen:Sind einige JavaFX-Layouts nicht mit Mac-Computern kompatibel?

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

Dies war die Maximierung des Bildschirms zu ermöglichen, nachdem der Benutzer anmeldet. Nachdem sich der Mac-Benutzer angemeldet hat, wird die Bühne stattdessen in ein kleines Fenster in der unteren linken Ecke minimiert und verschwindet dann. Eine ähnliche Sache passiert jetzt mit einem neuen Zusatz, den ich gemacht habe.

enter image description here

Ich habe diese zusätzlich eine Seite im Menü innerhalb der Anwendung zu integrieren. Wie Sie sehen können, habe ich die gesamte Szene in einen Stapelbereich und dann Ankerbereich (siehe Hierarchie) mit einem externen Ankerbereich für das Seitenmenü gelegt. Jetzt kommt genau das gleiche vor, wo es minimiert und auf zwei verschiedenen Macs verschwinden würde, Windows ist völlig in Ordnung.

Irgendetwas führt mich zu der Annahme, dass einige Layouts und Bühneneinstellungen nicht mit Macs kompatibel sind, da es erst nach dem Umhüllen der Hauptszene erneut auftrat. Hat jemand dieses Problem erfahren oder weiß, wie man es repariert?

+0

Wirklich gute Frage! – Milan

+0

Der eigentliche Layout-Code ist in Java geschrieben, sollte also auf jedem System dasselbe tun (zumindest wenn auf den Systemen die gleiche JDK-Version läuft). Die 'Screen'-API (' Screen.getPrimary() 'und' screen.getVisualBounds() ') muss offensichtlich mit dem nativen System kommunizieren und möglicherweise einige Koordinatentransformationen durchführen. Können Sie protokollieren, welche Werte Sie für die Bildschirmgrenzen auf den verschiedenen Systemen erhalten? Welche JDK-Version wird auf jedem System ausgeführt? Einige frühere JDK-Versionen auf Mac hatten Bugs, die native Bildschirmkoordinaten in das von JavaFX verwendete Koordinatensystem transformierten. –

Antwort

1

Wenn Stufe Werte einstellen, sollten Sie: an der Seite abhängig von der Auflösung des Bildschirms alle Ihre Kontrollen

//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); 

Dies würde die Fenstergröße automatisch ändern. So können Sie Ihren JavaFX mit allen Betriebssystemen kompatibel machen.

GoodLuck. Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen. :)

+0

funktioniert perfekt! Danke – Philayyy

Verwandte Themen