2012-12-31 54 views
18

Tôi muốn đổi kích thước cửa sổ để vừa với nội dung của cửa sổ. Trong Swing có phương thức pack(). Có một phương pháp tương tự để làm điều này trong JavaFX?JavaFX tương đương với gói Swing()

Điều tôi đang cố làm là tạo hộp thoại xác nhận. Khi tôi tạo hộp thoại, nó rộng hơn nội dung, vì vậy tôi tự hỏi mình có cần thứ gì đó giống như phương pháp gói hay không.

Đây là một ảnh chụp màn hình về những gì đang xảy ra: enter image description here

Và đây là mã của tôi:

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

Tôi hy vọng họ thực hiện một cái gì đó giống như JOptionPane trong JavaFX sớm! Đây là điều mà tôi không nên làm, nó rất cơ bản ...

+0

Bạn tốt hơn gói nó thủ công, là có thể, thường công trình xây dựng nên được tốt hơn của png ví dụ. –

+0

@PeterRader vui lòng xem mã của tôi ở trên và cho tôi biết nếu có điều gì đó sai. – ceklock

+0

@tecnotron và cũng lưu ý rằng bạn đã sử dụng hộp ở đây. Điều này là do hộp. –

Trả lời

16

Hãy thử sử dụng sizeToScene() Tôi nghĩ đây là những gì bạn muốn. Để tôi cho một ví dụ:

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

Cảm ơn cho tipToScene(). Đó là phương pháp tôi đang tìm kiếm. Nó rất tốt để sử dụng khi nội dung của Stage được thay đổi. – ceklock

Các vấn đề liên quan