Подтвердить что ты не робот

Эквивалент JavaFX пакета Swing()

Я хочу изменить размер окна, чтобы оно соответствовало содержимому окна. В Swing есть метод pack(). Есть ли подобный способ сделать это в JavaFX?

Я пытаюсь создать диалог подтверждения. Когда я создаю диалог, он шире, чем его содержимое, поэтому я спрашивал себя, нужно ли мне что-то вроде метода pack.

Вот скриншот того, что происходит: enter image description here

И вот мой код:

mainClass.getPrimaryStage().setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(final WindowEvent e) {
        e.consume();

        final Stage dialog = new Stage();
        dialog.setTitle("Confirm Before Exit");
        dialog.setResizable(false);
        dialog.initOwner(mainClass.getPrimaryStage());
        dialog.initModality(Modality.APPLICATION_MODAL);

        FlowPane buttons = new FlowPane(10,10);
        buttons.setAlignment(Pos.CENTER);
        Button yes = new Button("Yes");
        Button no = new Button("No");
        buttons.getChildren().addAll(yes, no);
        VBox box = new VBox();
        box.setAlignment(Pos.CENTER);
        box.setSpacing(10);
        box.getChildren().addAll(new Label("Do you really want to exit?"), buttons);

        yes.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent t) {
                Platform.exit();
            }
        });
        no.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent t) {
                dialog.close();
            }
        });

        Scene s = new Scene(box);
        dialog.setScene(s);
        dialog.show();
    }
});

Я надеюсь, что они скоро реализуют что-то вроде JOptionPane в JavaFX! Это не то, что я должен делать, это так просто...

4b9b3361

Ответ 1

Попробуйте использовать sizeToScene() Я думаю, что это то, что вы хотите. Позвольте мне дать пример:

JavaFX stage fitted to a button

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class NewFXMain extends Application {

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

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root));
        primaryStage.sizeToScene();
        primaryStage.show();
    }
}