回答編集履歴
1
追記
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です。
|
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式やメソッド参照を用いすっきりしたコードにすることをお勧めしたいと思いこうしました。
|