J'ai cherché une méthode pour cela, mais j'ai seulement trouvé This question without answers. Je développe dans un ordinateur portable 1366x768, j'utilise JavaFX pour créer une interface graphique (je suis désolé, mais je ne peux pas poster le code, c'est essentiellement un AnchorPane contenant un couple GridPanes, qui contiennent plus de GridPanes, qui contiennent des étiquettes , TextFields et quelques graphiques).Mise à l'échelle de résolution d'écran JavaFX
Le problème survient lorsque je charge le projet sur une autre résolution (1920 x 1080 ou 1600 x 900). J'utilise stage.setMaximized(true);
, mais cela ne fait qu'échelonner l'arrière-plan, la scène elle-même, de sorte que tous les éléments et conteneurs (panneaux, étiquettes, champs de texte .....) restent de la même taille qu'avec la résolution 1366x768, ce qui rend le GUI "ne correspond pas" à des résolutions qui ne sont pas exactement 1366x768.
J'espère avoir expliqué mon problème assez bien, mon anglais est loin d'être parfait.
Quelqu'un a-t-il une suggestion sur la façon de faire évoluer les éléments avec la résolution de scène?
(J'ai besoin que le logiciel soit agrandi ou plein écran dans chaque moniteur, donc faire une résolution fixe (1366x768, par exemple) ne semble pas être une bonne solution).
Merci à tous.
Mise à jour:
Je viens de créer un petit exemple. C'est un GridPane 2x1 à l'intérieur du JavaFX AnchorPane par défaut, j'ai ajouté deux exemples de boutons au volet de la grille.
<AnchorPane minHeight="-Infinity" minWidth="-Infinity" prefHeight="300.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" >
<children>
<GridPane prefHeight="300.0" prefWidth="400.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Button fx:id="example1" mnemonicParsing="false" text="Example 2" GridPane.halignment="CENTER" GridPane.valignment="CENTER" />
<Button fx:id="example2" mnemonicParsing="false" text="Example 2" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="CENTER" />
</children>
</GridPane>
</children>
Ce code est joli dans un écran 400x300 (Trop peu, je sais, il est juste un exemple), quand je l'échelle à 1366x768 (pas vrai plein écran, juste stage.setMaximized(true);
), le GridPane n'est pas à l'échelle, seulement la scène elle-même, donc j'ai un fond d'écran plein, avec un volet de 400x300 (avec ses minuscules boutons) dans le coin supérieur gauche de mon écran.
TL; DR: L'exemple de code les boutons restent dans le coin supérieur gauche de l'écran, et le reste est juste un espace vide lorsque j'agrandis la résolution.
Mise à jour 2; J'ai oublié le code Java.
Parent root = FXMLLoader.load(getClass().getResource("UI.fxml"));
Scene scene = new Scene(root, java.awt.Toolkit.getDefaultToolkit().getScreenSize().width,
java.awt.Toolkit.getDefaultToolkit().getScreenSize().height);
stage = new Stage();
stage.setMaximized(false);
stage.setScene(scene);
stage.setTitle("Example Menu");
stage.show();
J'ai peur qu'il soit impossible d'aider sans voir du code. Cela ressemble à un problème de mise en page, peut-être des positions ou des tailles codées en dur. Avez-vous lu les commentaires sur la question liée? Semble être un problème similaire. –
Je n'ai rien codé en dur. J'ai tout fait avec 'JavaFX SceneBuilder 2', et quand on regarde la taille, tout (Min, pref et max) dit' USE_COMPUTED_SIZE'.Je comprends qu'il est difficile d'aider sans voir le code, mais si je mets le code en ligne, je pourrais me faire virer, et je ne le veux pas, désolé. Merci d'essayer d'aider :) – Tuzane
Je vois, mais peut-être que vous pouvez coder un petit exemple autonome qui n'est pas lié à votre travail? Juste un écran simple avec un ou deux composants pour simuler le problème? –