2012-12-31 9 views
18

Ich möchte die Größe eines Fensters ändern, damit es in den Inhalt des Fensters passt. In Swing gibt es die pack() Methode. Gibt es eine ähnliche Methode in JavaFX?JavaFX Pendant zu Swing's pack()

Ich versuche, einen Bestätigungsdialog zu erstellen. Wenn ich den Dialog erstelle, ist er breiter als der Inhalt, also habe ich mich gefragt, ob ich etwas wie die Pack-Methode brauche. Hier

ist ein Screenshot von dem, was geschieht: enter image description here

Und hier ist mein 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(); 
     } 
    }); 

Ich hoffe, dass sie so etwas wie JOptionPane in JavaFX implementieren bald! Dies ist etwas, das ich nicht tun sollte, es ist so einfach ...

+0

Sie es besser packen manuell möglich, wo oft Konstruktionen sollten besser png zum Beispiel. –

+0

@PeterRader sehen Sie bitte meinen Code oben und sagen Sie mir, wenn etwas falsch ist. – ceklock

+0

@tecnotron und beachte auch, dass du die Box hier benutzt hast.Dies ist wegen der Box. –

Antwort

16

Versuchen Sie mit sizeToScene() Ich denke, das ist es, was Sie wollen. Lassen Sie mich ein Beispiel geben:

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

Danke für den sizeToScene() Tipp. Das ist die Methode, nach der ich gesucht habe. Es ist sehr gut zu verwenden, wenn der Inhalt der Bühne geändert wird. – ceklock