2012-12-31 17 views
18

Chcę zmienić rozmiar okna, aby pasował do zawartości okna. W Swing znajduje się metoda pack(). Czy istnieje podobna metoda to zrobić w JavaFX?Odpowiednik JavaFX pakietu Swing()

Co próbuję zrobić, to utworzyć okno dialogowe potwierdzenia. Kiedy tworzę okno dialogowe, jest szersze niż zawartość, więc zadaję sobie pytanie, czy potrzebuję czegoś takiego jak metoda paczki.

Oto zrzut ekranu z tego, co się dzieje: enter image description here

I tu jest mój kod:

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

Mam nadzieję, że coś takiego JOptionPane wdrożyć w JavaFX wkrótce! To jest coś, czego nie powinienem robić, jest tak podstawowy ...

+0

Lepiej zapakować to instrukcja, gdzie to możliwe, często konstrukcje powinny być lepiej png dla przykładu. –

+0

@PeterRader Proszę zobaczyć mój kod powyżej i powiedz mi, czy coś jest nie tak. – ceklock

+0

@tecnotron, a także zauważ, że użyłeś tu pola. Dzieje się tak z powodu pola. –

Odpowiedz

16

Spróbuj użyć sizeToScene() Myślę, że to jest to, czego chcesz. Podam przykład:

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

Dzięki za wskazówkę sizeToScene(). To jest metoda, której szukałem. Jest bardzo dobry do użycia, gdy zmienia się zawartość stołu montażowego. – ceklock