回答編集履歴

2

showが抜けていたので修正。

2017/12/19 08:34

投稿

masaya_ohashi
masaya_ohashi

スコア9206

test CHANGED
@@ -108,6 +108,8 @@
108
108
 
109
109
  stage.setScene(scene);//このステージで使用されるシーンを指定
110
110
 
111
+ stage.show();
112
+
111
113
  System.out.println("a");//確認用文字出力
112
114
 
113
115
  } else {

1

追記

2017/12/19 08:34

投稿

masaya_ohashi
masaya_ohashi

スコア9206

test CHANGED
@@ -35,3 +35,247 @@
35
35
  ### 全体
36
36
 
37
37
  コードを見るに、あなたはまだJavaの知識すら初歩段階であるにもかかわらず、JavaFXの知識ばかりを身に着けようとし、3ステップくらい先のことをやろうとしています。これではいつまでも理解が追いつかないままで進んでしまいます。私はこういったことをしてしまう初心者には厳しくあたって方向修正するようにしています。
38
+
39
+
40
+
41
+
42
+
43
+ # 追記
44
+
45
+ 不要コードとおぼしきものの削除、インデントの整理、処理の共通化を行いました。
46
+
47
+
48
+
49
+ Original.java
50
+
51
+ ```Java
52
+
53
+ public class Original extends Application {
54
+
55
+ private static Original instance;
56
+
57
+ private Stage stage;
58
+
59
+ @Override
60
+
61
+ public void start(Stage primaryStage) throws Exception {
62
+
63
+ // インスタンス
64
+
65
+ instance = this;
66
+
67
+ stage = primaryStage;
68
+
69
+ try {
70
+
71
+ // replaceSceneContentを改善してFXMLLoaderの処理の内包、
72
+
73
+ // ウィンドウタイトルの変更も同時に行うよう修正。
74
+
75
+ replaceSceneContent("hello.fxml", "Hello");
76
+
77
+ } catch(Exception e) {
78
+
79
+ e.printStackTrace();
80
+
81
+ }
82
+
83
+ }
84
+
85
+
86
+
87
+ public static void main(String[] args) {
88
+
89
+ launch(args);
90
+
91
+ }
92
+
93
+
94
+
95
+ private void replaceSceneContent(String fxmlFile, String windowTitle) {
96
+
97
+ FXMLLoader loader = new FXMLLoader(getClass().getResource(fxmlFile));
98
+
99
+ Parent root = loader.load(); // fxmlに定義したノードの一番根っこの部分(hello.fxml、Main.fxmlで言えばAnchorPane)が得られる
100
+
101
+
102
+
103
+ Scene scene = stage.getScene();
104
+
105
+ if (scene == null) {
106
+
107
+ scene = new Scene(root); // シーンの初期化に必要なのはノード
108
+
109
+ stage.setScene(scene);//このステージで使用されるシーンを指定
110
+
111
+ System.out.println("a");//確認用文字出力
112
+
113
+ } else {
114
+
115
+ stage.getScene().setRoot(root);
116
+
117
+ }
118
+
119
+
120
+
121
+ // タイトルセット
122
+
123
+ stage.setTitle(windowTitle);
124
+
125
+ }
126
+
127
+
128
+
129
+ public void MainController() throws IOException {
130
+
131
+ this.replaceSceneContent("Main.fxml", "Main");
132
+
133
+ }
134
+
135
+
136
+
137
+ public static Original getInstance() {
138
+
139
+ return instance;
140
+
141
+ }
142
+
143
+ }
144
+
145
+ ```
146
+
147
+
148
+
149
+ MainController.java
150
+
151
+ ```Java
152
+
153
+ package fx;
154
+
155
+
156
+
157
+ import <略>
158
+
159
+
160
+
161
+ public class MainController implements Initializable { // extends AnchorPaneをやめる。コントローラとノードは別であるべき。
162
+
163
+ @FXML
164
+
165
+ private ChoiceBox<String> dropDown;
166
+
167
+ @FXML
168
+
169
+ private TextField textBox;
170
+
171
+ @FXML
172
+
173
+ private Button button;
174
+
175
+
176
+
177
+ @Override
178
+
179
+ public void initialize(URL location, ResourceBundle resources) {
180
+
181
+ // 何もしない
182
+
183
+ }
184
+
185
+
186
+
187
+ public MainController() {
188
+
189
+ }
190
+
191
+
192
+
193
+ @FXML
194
+
195
+ public void onClick(ActionEvent event) {
196
+
197
+ // テキストボックスに文字列をセットする
198
+
199
+ textBox.setText("ボタンを押しました。");
200
+
201
+ }
202
+
203
+ }
204
+
205
+ ```
206
+
207
+
208
+
209
+ HelloController.java
210
+
211
+ ```Java
212
+
213
+ package fx;
214
+
215
+
216
+
217
+ import java.io.IOException;
218
+
219
+ import java.net.URL;
220
+
221
+ import java.util.ResourceBundle;
222
+
223
+ import javafx.event.ActionEvent;
224
+
225
+ import javafx.fxml.FXML;
226
+
227
+ import javafx.fxml.FXMLLoader;
228
+
229
+ import javafx.fxml.Initializable;
230
+
231
+ import javafx.scene.control.Button;
232
+
233
+ import javafx.scene.control.Label;
234
+
235
+ import javafx.scene.layout.AnchorPane;
236
+
237
+
238
+
239
+ public class HelloController implements Initializable {// extends AnchorPaneをやめる。コントローラとノードは別であるべき。コントローラクラスにはInitializableインタフェースを実装しておくべき。
240
+
241
+ @FXML
242
+
243
+ private Button helloButton;
244
+
245
+ @FXML
246
+
247
+ private Label helloLabel;
248
+
249
+ private int cnt;
250
+
251
+
252
+
253
+ @Override
254
+
255
+ public void initialize(URL location, ResourceBundle resources) {
256
+
257
+ // 何もしない
258
+
259
+ }
260
+
261
+
262
+
263
+ @FXML
264
+
265
+ public void onHelloButtonClicked(ActionEvent event) throws IOException {
266
+
267
+ /*this.helloLabel.setText("clicked! : " + cnt);
268
+
269
+ cnt++;*/
270
+
271
+ Original.getInstance().MainController();
272
+
273
+ }
274
+
275
+ }
276
+
277
+ ```
278
+
279
+
280
+
281
+ hello.fxml、Main.fxmlに変更はなし。