在调整框架大小时,让javafx GUI背景保持居中的麻烦

时间:2017-03-24 03:35:25

标签: java user-interface javafx

所以这是我的代码,我启动了我在上一篇文章中读到的GUI,它可能与我的root类型为Group的事实有关,但我无法弄清楚如何实现任何其他办法。当我尝试手动调整主框架的大小时,GUI内的内容会被吃掉。我希望它保持居中并随框架调整大小。

package view;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import singleton.MainModel;

public class MainView extends Application {
    @Override
    public void start(Stage primaryStage) {
        // Initialize mainController.
        MainController mainController = new MainController();

        // Add the controller to the singleton.
        MainModel.getModel().getMainData().setMainController(mainController);

        // Initialize display components.
        Group root = new Group();
        Scene scene = new Scene(root, 1280, 720);

        // Add mainController.
        root.getChildren().addAll(mainController);

        // Pin the root to scene and display it.
        primaryStage.setScene(scene);
        primaryStage.show();

        // Properly terminate the application if the user presses the "X" window button.
        primaryStage.setOnCloseRequest(event -> {
            mainController.closeApplication();
            stop();
        });

        // Set the title and make the application a fixed size.
        primaryStage.setTitle("Visual Earth Modelling System");
        primaryStage.setResizable(true);
        primaryStage.sizeToScene();



        // Add the stage to the singleton.
        MainModel.getModel().getMainData().setMainStage(primaryStage);

        // Go to the first screen.
        mainController.goToLoginScreen();
    }

    /**
     * To destroy resources upon application close. Should be called in all instances of a properly closed JavaFX application.
     */
    @Override
    public void stop() {
        if (MainModel.getModel().getNetworkData().isHandlerSet())
            MainModel.getModel().getNetworkData().closeHandler();
    }

    /**
     * This method is actually not used in a correctly deployed JavaFX application. Instead, the start method above is called. This main serves as a fallback in case of improper configuration.
     */
    public static void main(String[] args) {
        launch(args);
    }
}

enter image description here

1 个答案:

答案 0 :(得分:0)

Group替换为StackPane。默认情况下,StackPane会将子项的对齐方式设置为居中。为了确保对齐正确,您可以通过StackPane.setAlignment(Pos value)设置明确。

StackPane root = new StackPane();
root.setAlignment(Pos.CENTER);
root.getChildren().add(mainController);
Scene scene = new Scene(root, 1280, 720);