2012-12-31 52 views
18

我想調整窗口大小以適應窗口的內容。在Swing中有pack()方法。 JavaFX中有類似的方法嗎?JavaFX相當於Swing的包()

我想要做的是創建一個確認對話框。當我創建對話框時,它比內容更廣泛,所以我問自己是否需要類似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中!這是我不應該做的,它是如此基本...

+0

你最好收拾它手動在可能情況下,往往結構最好是PNG的例如。 –

+0

@PeterRader請看我上面的代碼,並告訴我是否有錯誤。 – ceklock

+0

@tecnotron並且還請注意,您在這裏使用了框。這是因爲框。 –

回答

16

嘗試使用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(); 
    } 
} 
+0

感謝sizeToScene()提示。這是我正在尋找的方法。舞臺內容改變時使用非常好。 – ceklock