如何使用JavaFX在单个帧中执行多阶段操作?

时间:2015-12-11 12:43:24

标签: java javafx javafx-8

我想在一个帧中执行多个阶段操作:

stage.sizeToScene()
stage.centerOnScreen()

目前我可以看到舞台首先调整大小,然后居中。我希望在同一个 re-paint 上完成两个操作 atomically

这是一个有效的例子:

package sample;

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class Main extends Application {

    private HBox first = new HBox();
    private HBox second = new HBox();

    private Button change1 = new Button("Go to 2nd");
    private Button change2 = new Button("Go to 1st");

    @Override
    public void start(Stage primaryStage) throws Exception{
        primaryStage.setTitle("Hello World");
        first.setSpacing(10);
        first.setAlignment(Pos.CENTER_LEFT);
        first.getChildren().addAll(
            change1, new Label("Hello"), new Label("World")
        );
        second.setSpacing(10);
        second.setAlignment(Pos.CENTER_LEFT);
        second.getChildren().addAll(
            change2, new Label("BYE MY FRIENDS, THIS IS MUCH LONGER!")
        );
        change1.setOnAction(event -> {
            primaryStage.getScene().setRoot(second);
            primaryStage.sizeToScene();
            primaryStage.centerOnScreen();
        });
        change2.setOnAction(event -> {
            primaryStage.getScene().setRoot(first);
            primaryStage.sizeToScene();
            primaryStage.centerOnScreen();
        });
        primaryStage.setScene(new Scene(first));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}

要重现,请启动应用程序,左上方移动窗口并将其放大。然后单击按钮。您将看到窗口首先调整大小,然后移动到中心。

在这个例子中,它真的非常快,因为应用程序非常简单。但是对于真实世界的应用程序,它更加明显。

0 个答案:

没有答案