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?
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);
Mentionnez que:
Vous devez utiliser les dispositions JavaFX intégrées (BorderPane, GridPane .... etc ...)
Cela ne peut pas être fait automatiquement. Vous devez le programmer pour le faire.
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):
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-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.