Эквивалент 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! Это не то, что я должен делать, это так просто...
Ответы
Ответ 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();
}
}