2012-12-31 8 views
18

ウィンドウの内容に合わせてウィンドウのサイズを変更したいと思います。 Swingにはpack()メソッドがあります。 JavaFXでも同様の方法がありますか?JavaFX相当のSwingのpack()

私がしようとしているのは、確認ダイアログを作成することです。ダイアログを作成するときは内容よりも幅が広いので、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(); 
     } 
    }); 

私は、彼らはすぐにJavaFXの中のJOptionPaneのようなものを実装して願っています!これは私がやってはならないことです、それはとても基本的です...

+0

は、あなたがより良いパック、多くの場合、構造が良く例えばPNG形式のでなければなりません。 –

+0

@PeterRader上記のコードを見て、間違っているかどうか教えてください。 – ceklock

+0

@ tecnotronまた、ここにボックスを使用したことにも注意してください。これはボックスのためです。 –

答えて

16

を試してください私はこれがあなたが欲しいと思うものです。私は に例を挙げてみましょう:それは手動可能であれば

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

関連する問題