Как автоматически resize окон в JavaFx для разных разрешений?

У меня есть следующая проблема:

Я создал окно JavaFX на рабочем столе с полным hd, и я установил сцену следующим образом:

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

Когда я запускаю приложение на ноутбуке с разрешением 1360*760 , я не вижу всего приложения, и я не могу его изменять.

Как я могу настроить автоматическое изменение размера приложения в зависимости от рабочего стола / ноутбука и его разрешения и размеров?

    Я считаю, что вы ищете это

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

    Это позволит вам использовать размер экрана вашего устройства, и все, что вам нужно сделать для изменения размера, делает длину / ширину объектов в вашей программе пропорциональной ширине и высоте экрана.

    Упомяните, что:

    1) Вы должны использовать сборку в макетах JavaFX (BorderPane, GridPane …. и т. Д.)

    2) Нет автоматического доступа. Вы должны запрограммировать его для этого.

    3) Обычно бывает, что вы хотите знать экран (ширину или высоту) без панели задач (в Windows, Linux, Mac, Solaris). В этом случае вы играете с getVisualBounds()...

    Главная тема


    Вы спрашиваете об адаптивном дизайне. Ниже приводится пример того, что вы хотите сделать. Хотя это не лучшее решение, я имею в виду, что он может быть изменен для повышения производительности (я также добавил код для перемещения windows, если это StageStyle.UNDECORATED Перетащите окно, чтобы увидеть это):

    введите описание изображения здесь

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

    Вы можете просто сделать это:

      primaryStage.setMaximized(true); 

    1 – использование макетов JavaFX (BorderPane, GridPane …. и т. Д.)

    2-добавить некоторые ограничения компоновки

    вы можете использовать построитель сцен, чтобы сгенерировать ваш файл FXML и resize экрана, чтобы увидеть, что происходит в этом учебнике для макета.

    так вы говорите программе о том, чтобы нарисовать ваши компоненты на основе ограничений, чтобы таким образом он был отзывчивым, он будет следить за вашим ограничением и автоматически настраивать компоненты.