2017-05-23 22 views
0

ウィンドウの最小高さを、それが含むシーンの高さ+タイトルバーの高さに設定しようとしています(ウィンドウを表示した後、さらに縮小する可能性はありません) 。 this答え、次の私は書いた:タイトルバー(ウィンドウが表示される前にJavaFX setOnShownが起動する

stage.setOnShown(event -> { 
    stage.setMinHeight(stage.getHeight()); 
}); 

イベントも画面に表示されていないウィンドウを解雇された理由はときかかわらず動作するようには思えないし、その高さは、まだシーンの高さに等しく、考慮されていない)。私の質問は、 - ウィンドウが実際に画面に表示されているときにコードを実行する方法ですか?

+0

探しています.sizeToScene(); 'メソッド?このWindowの幅と高さをこのWindowのシーンのコンテンツのサイズに合わせて設定します。 – Yahya

+1

ありがとう、私はこの方法について知りませんでした。しかし、問題はウィンドウのサイズ変更ではなく、最小限のサイズに制約を置くことにあります。 – asdfzcx

答えて

0

あなたをレイアウトするシーンのルートを強制して、シーンのサイズに、ステージのサイズをすることができます

stage.setOnShown(e -> { 
    stage.getScene().getRoot().layout(); 
    stage.sizeToScene(); 
    stage.setMinHeight(stage.getHeight()); 
}); 

をここにSSCCEです:あなたは `セージのため

import javafx.application.Application; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class StageSizeTest extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     primaryStage.setOnShown(e -> { 
      primaryStage.getScene().getRoot().layout(); 
      primaryStage.sizeToScene(); 
      System.out.printf("[%.1f, %.1f]%n", primaryStage.getWidth(), primaryStage.getHeight()); 
      primaryStage.setMinWidth(primaryStage.getWidth()); 
      primaryStage.setMinHeight(primaryStage.getHeight()); 
     }); 

     VBox root = new VBox(10, 
       new Label("Test one"), 
       new Label("Another test"), 
       new Label("Another really long label to give the scene some width"), 
       new Label("Bottom label")); 
     root.setPadding(new Insets(10)); 

     Scene scene = new Scene(root); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

Hm、問題は残ります:[例](https://i.imgur.com/HDTacAq.gif) – asdfzcx

+0

@asdfzcx Strange;それは私にとってうまくいく。ウィンドウのサイズを元のサイズよりも小さくすることはできません。どのプラットフォーム(OSとJDKバージョン)を使用していますか? –

+0

私はLinux(distro-Solus)とOpenJDK 1.8.0_121を使用しています。 – asdfzcx

関連する問題