web-dev-qa-db-fra.com

Comment redimensionner automatiquement les fenêtres en JavaFx pour différentes résolutions?

J'ai le problème suivant:

J'ai créé une fenêtre JavaFX sur un ordinateur de bureau avec disque dur complet et je règle la scène comme suit:

Scene scene = new Scene(root,1475,1015);

Lorsque j'exécute l'application sur un ordinateur portable avec une résolution de 1360*760, je ne peux pas voir la totalité de l'application et je ne peux pas la redimensionner.

Comment puis-je configurer mon application pour qu'elle redimensionne automatiquement en fonction du bureau/de l'ordinateur portable, de sa résolution et de ses dimensions?

5
Dina Bogdan

Je crois que tu cherches ça

GraphicsDevice Gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int width = Gd.getDisplayMode().getWidth();
int height = Gd.getDisplayMode().getHeight();

Cela vous permettra d'utiliser la taille de l'écran de votre appareil. Tout ce que vous devez faire pour redimensionner est de rendre la longueur/largeur des objets de votre programme proportionnelle à la largeur et à la hauteur de l'écran.

Vous pouvez simplement faire ça:

   primaryStage.setMaximized(true);
1
nadhem

Mentionnez que:

  1. Vous devez utiliser les dispositions JavaFX intégrées (BorderPane, GridPane .... etc ...)

  2. Cela ne peut pas être fait automatiquement. Vous devez le programmer pour le faire.

  3. Par exemple, il est courant que vous souhaitiez connaître l'écran (largeur ou hauteur) sans la barre des tâches (sous Windows, Linux, Mac, Solaris). Dans ce cas, vous jouez avec getVisualBounds()...

Thème principal


Vous demandez à propos de Responsive Design . Vous trouverez ci-dessous un exemple de ce que vous voulez faire. Bien que ce ne soit pas la meilleure solution, cela signifie qu’elle peut être modifiée pour de meilleures performances (j’ai également ajouté du code pour déplacer la fenêtre. si c’est StageStyle.UNDECORATED faites glisser la fenêtre pour voir ceci):

 enter image description here

import javafx.application.Application;
import javafx.scene.Cursor;
import javafx.scene.Scene;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.BorderPane;
import javafx.scene.Paint.Color;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class FX extends Application {

    int screenWidth = (int) Screen.getPrimary().getBounds().getWidth();
    int screenHeight = (int) Screen.getPrimary().getBounds().getHeight();

    Stage stage;
    Scene scene;

    int initialX;
    int initialY;

    @Override
    public void start(Stage s) throws Exception {

        // root
        BorderPane root = new BorderPane();
        root.setStyle("-fx-background-color:rgb(186,153,122,0.7); -fx-background-radius:30;");

        // Responsive Design
        int sceneWidth = 0;
        int sceneHeight = 0;
        if (screenWidth <= 800 && screenHeight <= 600) {
            sceneWidth = 600;
            sceneHeight = 350;
        } else if (screenWidth <= 1280 && screenHeight <= 768) {
            sceneWidth = 800;
            sceneHeight = 450;
        } else if (screenWidth <= 1920 && screenHeight <= 1080) {
            sceneWidth = 1000;
            sceneHeight = 650;
        }

        // Scene
        stage = new Stage();
        stage.initStyle(StageStyle.TRANSPARENT);
        scene = new Scene(root, sceneWidth, sceneHeight, Color.TRANSPARENT);

        // Moving
        scene.setOnMousePressed(m -> {
            if (m.getButton() == MouseButton.PRIMARY) {
                scene.setCursor(Cursor.MOVE);
                initialX = (int) (stage.getX() - m.getScreenX());
                initialY = (int) (stage.getY() - m.getScreenY());
            }
        });

        scene.setOnMouseDragged(m -> {
            if (m.getButton() == MouseButton.PRIMARY) {
                stage.setX(m.getScreenX() + initialX);
                stage.setY(m.getScreenY() + initialY);
            }
        });

        scene.setOnMouseReleased(m -> {
            scene.setCursor(Cursor.DEFAULT);
        });

        stage.setScene(scene);
        stage.show();
    }

    /**
     * Main Method
     * 
     * @param args
     */
    public static void main(String[] args) {
        launch(args);
    }

}
1
GOXR3PLUS

1-utilisant des mises en page JavaFX (BorderPane, GridPane .... etc ...)

2-ajouter des contraintes de mise en page

vous pouvez utiliser le générateur de scènes pour générer votre fichier FXML et redimensionner votre écran pour voir ce qu'il se passe. Voir ce tutoriel pour layout

c'est la façon dont vous indiquez au programme de dessiner vos composants en fonction de contraintes. Ainsi, sa conception sera réactive, il suivra votre contrainte et ajustera automatiquement les composants.

0
Mazen Embaby