回答編集履歴

1

追記

2017/02/16 00:39

投稿

KSwordOfHaste
KSwordOfHaste

スコア18392

test CHANGED
@@ -1,9 +1,71 @@
1
- ImageViewはイメージを生成する際に作るのではなく、初めから作ってしまう方法が簡単かと思います。表示すべきImageを指定しなくてもImageView自体は生成でき、そのまま画面上に配置してかまいません。
1
+ ImageViewはイメージを生成する際に作るのではなく、初めから作ってしまう方法が簡単かと思います。表示すべきImageを指定しなくてもImageView自体は生成でき、そのまま画面上に配置してかまいません。**...(A)**
2
2
 
3
3
 
4
4
 
5
- またImageViewへのImageの設定は、そのImageViewに画像が指定ずみであってもなくても気にする必要はありません。単に表示させたいImageを好きな時に設定してやりさえすればOKです。画面の更新はJavaFXランタイムが自動的に行ってくれます。
5
+ またImageViewへのImageの設定は、そのImageViewに画像が指定ずみであってもなくても気にする必要はありません。単に表示させたいImageを好きな時に設定してやりさえすればOKです。**...(B)**
6
+
7
+ 画面の更新はJavaFXランタイムが自動的に行ってくれます。
6
8
 
7
9
 
8
10
 
9
11
  大雑把にいえばJavaFXは画面に表示すべきもの(この場合はImage)をプロパティーへ設定しさえすれば画面の更新はプログラマーが気にしなくても自動的に行われます。その辺りは古いGUIシステムであるswingと使い勝手が大きく異なる点といえましょう。
12
+
13
+
14
+
15
+ ---
16
+
17
+
18
+
19
+ 追記:簡単にコードで表すと次のようなイメージになります。
20
+
21
+ 質問者さんはif文による切り分けが必要と考えておられたようですが、そのような必要はありません。
22
+
23
+ ```java
24
+
25
+ public class Rensyuuyou extends Application {
26
+
27
+ VBox imageBox = new VBox();
28
+
29
+ ImageView imageView = new ImageView();
30
+
31
+
32
+
33
+ @Override
34
+
35
+ public void start(Stage stage) {
36
+
37
+ ...
38
+
39
+ imageBox.getChildren().add(imageView); // <=「上の回答の(A)」
40
+
41
+ button.setOnAction(this::onOpenButton); // <=※メソッド参照(後述)
42
+
43
+ ...
44
+
45
+ }
46
+
47
+
48
+
49
+ void onOpenButton(ActionEvent event) {
50
+
51
+ // FileChooserでファイルを選びそこからイメージを生成する
52
+
53
+ // 以降の処理は初回のボタンクリックでも2回目以降のボタンクリックでも処理を
54
+
55
+ // 変える必要はない。
56
+
57
+ Image image = ...;
58
+
59
+ imageView.setImage(image); // <= 「上の回答の(B)」
60
+
61
+ ...
62
+
63
+ }
64
+
65
+ }
66
+
67
+ ```
68
+
69
+ ※メソッド参照:
70
+
71
+ 本件とは関係ないことですがボタンへのアクションハンドラーの設定コードをメソッド参照を用いる方法に書き換えました。メソッド参照やlambda式はJava8以降でしか使えませんが、JavaFXを使うならJava8以降が推奨バージョンだと思いますのでlambda式やメソッド参照を用いすっきりしたコードにすることをお勧めしたいと思いこうしました。