Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaFX equivalent of Swing's pack()

Tags:

I want to resize a window to fit the contents of the window. In Swing there is the pack() method. Is there a similar method to do this in JavaFX?

What I am trying to do is to create a confirmation dialog. When I create the dialog, it is wider than the contents, so I was asking myself if I need something like the pack method.

Here is a screenshot of what is happening: enter image description here

And here is my code:

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();     } }); 

I hope they implement something like JOptionPane in JavaFX soon! This is not something that I should be doing, it is so basic...

like image 209
ceklock Avatar asked Dec 31 '12 09:12

ceklock


People also ask

Can I use JavaFX with Swing?

JavaFX SDK provides the JFXPanel class, which is located in the javafx. embed. swing package and enables you to embed JavaFX content into Swing applications.


1 Answers

Try using sizeToScene() I think this is it what you want. Let me give an example:

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();     } } 
like image 173
joey rohan Avatar answered Sep 20 '22 05:09

joey rohan