2012-12-31 20 views
18

Pencerenin içeriğine sığacak şekilde bir pencereyi yeniden boyutlandırmak istiyorum. Swing'de pack() yöntemi var. JavaFX'te bunu yapmak için benzer bir yöntem var mı?Swing paketinin JavaFX eşdeğeri()

Yapmaya çalıştığım bir onay iletişim kutusu oluşturmaktır. İletişim kutusunu oluşturduğumda, içerikten daha geniştir, bu yüzden paket yöntemi gibi bir şeye ihtiyacım olursa kendime soruyordum. İşte

olup bitenlerin bir ekran görüntüsü: enter image description here

Ve işte benim kodudur:

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

Ben yakında JavaFX JOptionPane gibi bir şey uygulamak umut! Yapmamam gereken bir şey bu, bu çok basit ...

+0

iyi olur paketi, sık sık yapılar daha iyi örneğin png en olmalıdır. –

+0

@PeterRader lütfen yukarıdaki koduma bakın ve yanlış bir şey olup olmadığını bana bildirin. – ceklock

+0

@tecnotron ve ayrıca kutu kullanmış olduğunuzu da unutmayın. –

cevap

16

sizeToScene() kullanmayı deneyin. Beni bir örnek vereyim: Bu manuel mümkünse

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() ipucu için teşekkürler. Aradığım yöntem bu. Sahne Alanı'nın içeriği değiştiğinde kullanmak çok iyidir. – ceklock