Stageについての考察
Stageスタイル
Stageのスタイルは次の何れから選択することができます。スタイルとは背景の「透明」「不透明」の選択、および「最小化ボタン、最大化ボタン、閉じるボタン」の有無を選択することを意味します。スタイルの選択はinitStyleメソッドに下記のパラメータを指定することで行います。
- StageStyle.DECORATED
- : 不透明な白い背景。プラットフォームの装飾を持つStage。
- StageStyle.UNDECORATED
- : 不透明な白い背景。装飾のないStage。
- StageStyle.TRANSPARENT
- : 透明な背景を。装飾のないStage。
- StageStyle.UTILITY
- : 不透明な白い背景。プラットフォームの最小限の装飾を持つStage。
※下記サンプルソースでは、実行結果をわかりやすくするために、Scene、Labelを配置しています。
サンプルソース
- 1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 :
34 :
35 :
36 :
37 :
38 : -
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.text.Font; import javafx.stage.Stage; import javafx.stage.StageStyle; public class JavaFX_Stage extends Application { public static void main(String... args) { Application.launch(args); } @Override public void start(Stage stage) throws Exception { Label lbl = new Label("JavaFX!!"); lbl.setFont(new Font(20)); stage.setTitle("JavaFX"); stage.setScene(new Scene(lbl)); // stageにシーンを配置 stage.setWidth(300); // ウィンドウの横幅 stage.setHeight(100); // ウィンドウの高さ stage.initStyle(StageStyle.DECORATED); // stage.initStyle(StageStyle.UNDECORATED); // stage.initStyle(StageStyle.TRANSPARENT); // stage.initStyle(StageStyle.UTILITY); stage.show(); // ウィンドウの表示 } }
実行結果
不透明な白い背景で、プラットフォームのデフォルト装飾を持つ。「タイトルバー」および「最小化」「最大化」「閉じる」のボタンが配置される。デフォルトのスタイル。
不透明な白い背景で、タイトルバーなし。
※「閉じるボタン」がないため、アプリケーションを終了する際の手段を自作する必要があることに注意
※「閉じるボタン」がないため、アプリケーションを終了する際の手段を自作する必要があることに注意
透明な白い背景で、タイトルバーなし。
※サンプルでは、Sceneの背景色で透明に見えないが、Stageの背景は透明になっている。
※「閉じるボタン」がないため、アプリケーションを終了する際の手段を自作する必要があることに注意
※サンプルでは、Sceneの背景色で透明に見えないが、Stageの背景は透明になっている。
※「閉じるボタン」がないため、アプリケーションを終了する際の手段を自作する必要があることに注意
不透明な白い背景で「タイトルバー」および「閉じる」ボタンのみが配置される。
Stageオーナー
Stageは、オプションでオーナーを設定することが可能です。オーナーのStage(親)が閉じられると、所有しているすべてのStage(子)も全て閉じられます。
サンプルソース
- 1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 :
34 :
35 :
36 :
37 :
38 :
39 :
40 :
41 :
42 :
43 :
44 :
45 :
46 : -
import javafx.application.Application; import javafx.stage.Stage; public class JavaFX_StageOwner extends Application { public static void main(String... args) { Application.launch(args); } @Override public void start(Stage parentStage) throws Exception { // 最上位のStageを設定 parentStage . setTitle("parentStage"); parentStage . setWidth(300); // ウィンドウの横幅 parentStage . setHeight(100); // ウィンドウの高さ parentStage . setX(100); // ウィンドウの位置(X) parentStage . setY(100); // ウィンドウの位置(Y) parentStage . show(); // ウィンドウの表示 // 2つ目のStageを作成 Stage stage2 = new Stage(); stage2 . initOwner(parentStage); // オーナーの設定 stage2 . setTitle("Stage2"); stage2 . setWidth( 300); // ウィンドウの横幅 stage2 . setHeight(100); // ウィンドウの高さ stage2 . setX(200); // ウィンドウの位置(X) stage2 . setY(200); // ウィンドウの位置(Y) stage2 . show(); // ウィンドウの表示 // 3つ目のStageを作成 Stage stage3 = new Stage(); stage3 . initOwner(parentStage); // オーナーの設定 stage3 . setTitle("Stage3"); stage3 . setWidth( 300); // ウィンドウの横幅 stage3 . setHeight(100); // ウィンドウの高さ stage3 . setX(300); // ウィンドウの位置(X) stage3 . setY(300); // ウィンドウの位置(Y) stage3 . show(); // ウィンドウの表示 } }
実行結果
※prentStageを閉じると、全てのStageが閉じる。
モダリティ
Stage(ウィンドウ)に、モダリティの設定をすることが出来ます。設定は下記の3つから選択します。
- Modality.NONE
- 通常のウィンドウ。他のウィンドウをブロックしない。※デフォルト設定
- Modality.WINDOW_MODAL
- WINDOW_MODALを設定したStageの、オーナーStage(親)から、所有関係のある上位Stageの入力をブロックする。下記の図はWINDOW_MODALを設定した場合に、入力がブロックされるStageの関係を示しています。
【Modality.WINDOW_MODAL】
※StageAとStageBに所有関係はありませんので、StageBはブロックされません
- Modality.APPLICATION_MODAL
- APPLICATION_MODALを設定したStageおよび、その子階層Stage以外の入力イベントをブロックする。下記の図はAPPLICATION_MODALを設定した場合に、入力がブロックされるStageの関係を示しています。
【Modality.WINDOW_MODAL】
※StageAとStageBに所有関係はありませんがAPPLICATION_MODALを設定したStageと当該Stageが所有するStage以外は全てブロックされます。
サンプルソース
- 1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 :
34 :
35 :
36 :
37 :
38 :
39 :
40 :
41 :
42 :
43 :
44 :
45 :
46 :
47 :
48 :
49 :
50 :
51 :
52 :
53 :
54 :
55 :
56 :
57 :
58 :
59 :
60 :
61 :
62 :
63 :
64 :
65 :
66 :
67 :
68 :
69 :
70 :
71 :
72 :
73 :
74 :
75 :
76 :
77 :
78 :
79 :
80 : -
import javafx.application.Application; import javafx.stage.Modality; import javafx.stage.Stage; public class JavaFX_StageModality2 extends Application { public static void main(String... args) { Application.launch(args); } @Override public void start(Stage parentStage1) throws Exception { // 最上位のStageを設定 parentStage1 . setTitle("parentStage1"); parentStage1 . setWidth(300); // ウィンドウの横幅 parentStage1 . setHeight(100); // ウィンドウの高さ parentStage1 . setX(100); // ウィンドウの位置(X) parentStage1 . setY(100); // ウィンドウの位置(Y) parentStage1 . show(); // ウィンドウの表示 // 2つ目のStageを作成 Stage stage1_2 = new Stage(); stage1_2 . initOwner(parentStage1); stage1_2 . setTitle("Stage2"); stage1_2 . setWidth( 300); // ウィンドウの横幅 stage1_2 . setHeight(100); // ウィンドウの高さ stage1_2 . setX(200); // ウィンドウの位置(X) stage1_2 . setY(200); // ウィンドウの位置(Y) stage1_2 . show(); // ウィンドウの表示 // 3つ目のStageを作成 Stage stage1_3 = new Stage(); stage1_3 . initOwner(stage1_2); stage1_3 . setTitle("Stage3"); stage1_3 . setWidth( 300); // ウィンドウの横幅 stage1_3 . setHeight(100); // ウィンドウの高さ stage1_3 . setX(300); // ウィンドウの位置(X) stage1_3 . setY(300); // ウィンドウの位置(Y) stage1_3 . show(); // ウィンドウの表示 // 最上位のStageを設定 Stage parentStage2 = new Stage(); parentStage2 . setTitle("parentStage2"); parentStage2 . setWidth(300); // ウィンドウの横幅 parentStage2 . setHeight(100); // ウィンドウの高さ parentStage2 . setX(100); // ウィンドウの位置(X) parentStage2 . setY(400); // ウィンドウの位置(Y) parentStage2 . show(); // ウィンドウの表示 // 2つ目のStageを作成 Stage stage2_2 = new Stage(); stage2_2 . initOwner(parentStage2); stage2_2 . setTitle("Stage2_2"); stage2_2 . setWidth( 300); // ウィンドウの横幅 stage2_2 . setHeight(100); // ウィンドウの高さ stage2_2 . setX(200); // ウィンドウの位置(X) stage2_2 . setY(500); // ウィンドウの位置(Y) // stage2_2 . initModality(Modality.WINDOW_MODAL); stage2_2 . initModality(Modality.APPLICATION_MODAL); stage2_2 . show(); // ウィンドウの表示 // 3つ目のStageを作成 Stage stage2_3 = new Stage(); stage2_3 . initOwner(stage2_2); stage2_3 . setTitle("Stage2_3"); stage2_3 . setWidth( 300); // ウィンドウの横幅 stage2_3 . setHeight(100); // ウィンドウの高さ stage2_3 . setX(300); // ウィンドウの位置(X) stage2_3 . setY(600); // ウィンドウの位置(Y) stage2_3 . show(); // ウィンドウの表示 } }
実行結果
上記のプログラムソースでは、Stage_2_2、Stage_2_3以外はブロックされます。
※注意 モダリティを設定するStageはshowメソッドのコール前に設定すること。
(showメソッドの後で設定するとExceptionが発生します)