我有以下问题:
我在桌面上用全高清创建了一个JavaFX
窗口,我设置了这样的场景:
Scene scene = new Scene(root,1475,1015);
当我在具有1360*760
分辨率的笔记本电脑上运行应用程序时,我看不到整个应用程序,我无法调整它的大小。
如何将我的应用程序设置为自动调整桌面/笔记本电脑的功能及其分辨率和尺寸?
答案 0 :(得分:4)
我相信你正在寻找这个
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int width = gd.getDisplayMode().getWidth();
int height = gd.getDisplayMode().getHeight();
这将允许您使用设备的屏幕尺寸,并且您需要做的就是调整大小,使程序中对象的长度/宽度与屏幕的宽度和高度成比例。
答案 1 :(得分:2)
提及:
你必须在JavaFX布局中使用build(BorderPane,GridPane ......等......)
无法自动完成。您必须对其进行编程才能完成。
例如,您通常想知道没有任务栏的屏幕(宽度或高度)(在Windows,Linux,Mac,Solaris中)。在这种情况下,您可以使用getVisualBounds()...
主题
你问的是Responsive Design。下面是你想要做的一个例子。虽然不是最好的解决方案,但我的意思是它可以修改以获得更好的性能(我还添加了一些代码来移动窗口如果是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);
}
}
答案 2 :(得分:1)
你可以这样做:
primaryStage.setMaximized(true);
答案 3 :(得分:1)
Scene scene = new Scene(root, Double.MAX_VALUE, Double.MAX_VALUE);
答案 4 :(得分:0)
1 - 使用JavaFX布局(BorderPane,GridPane ......等......)
2 - 添加一些布局约束
您可以使用场景构建器生成FXML文件并调整屏幕大小以查看正在发生的事情,请参阅本教程中的layout
这就是你告诉程序根据约束绘制组件的方式,这样,它将是响应式设计,它将遵循你的约束并自动调整组件。