如何在不同的分辨率下自动调整JavaFx中的窗口大小?

我有以下问题:

我已经在全高清桌面上创build了一个JavaFX窗口,并设置了这样的场景:

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

当我在1360*760分辨率的笔记本电脑上运行应用程序时,我看不到整个应用程序,我无法调整它的大小。

如何设置我的应用程序自动调整桌面/笔记本电脑的function和它的分辨率和尺寸?

我相信你正在寻找这个

 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()...

主旋律


你问的是响应式设计。下面是你想要做的一个例子。虽然不是最好的解决方案,但是这意味着它可以被修改以获得更好的性能(我也添加了一些代码来移动窗口,如果它是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); } }