回答編集履歴

2

誤記訂正

2017/06/14 06:19

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -128,7 +128,7 @@
128
128
 
129
129
 
130
130
 
131
- - MyApp行儀のよいシングルトンではない
131
+ - MyApp行儀のよいシングルトンではない
132
132
 
133
133
  事実上JavaFXのアプリケーションクラスのインスタンスは一つしか生成されることはありませんが、それを保証するような行儀のよさは上記コードにはありません。(JavaFXの仕組み上、コンストラクターをprivateにできないのです)
134
134
 

1

補足

2017/06/14 06:19

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -111,3 +111,33 @@
111
111
  }
112
112
 
113
113
  ```
114
+
115
+
116
+
117
+ ---
118
+
119
+ 補足:例示コードによくない点もあるので補足します。
120
+
121
+
122
+
123
+ - Root1/Root2を別のクラスにしている意味
124
+
125
+ 質問者さんの元のコードでは2つのアプリケーションクラスで2つの画面の遷移をすることを意図していましたが、回答先頭にかいたようにお勧めできないので、ルートノードのクラスをBorderPaneの派生として独立させ、それぞれに画面ごとの制御やレイアウトを記述する考え方を例示してみました。
126
+
127
+ Root1,Root2は互いに他の画面の内部詳細にさわらない(見えない)方針とするため、相互の画面遷移部分はアプリケーションクラスのswitchRootメソッドにまかせる方式としています。
128
+
129
+
130
+
131
+ - MyApp行儀のよいシングルトンではない
132
+
133
+ 事実上JavaFXのアプリケーションクラスのインスタンスは一つしか生成されることはありませんが、それを保証するような行儀のよさは上記コードにはありません。(JavaFXの仕組み上、コンストラクターをprivateにできないのです)
134
+
135
+ しかしインスタンスが一つであるという前提で、staticなフィールド/メソッドを通じてインスタンスがシングルトンであるかのように利用しています。シングルトンを仮定しないコードの方が行儀がよいですが、それは質問者さんご自身で考えてみるとよいと思います。
136
+
137
+
138
+
139
+ - 画面を切り替えるswitchRootの引数がint
140
+
141
+ 1とか2といったマジックナンバーを渡しています。行儀のよいプログラムならenumなどにすべきですがそのような行儀のよさは省いています。
142
+
143
+