回答編集履歴
8
import文を追加
answer
CHANGED
@@ -48,6 +48,8 @@
|
|
48
48
|
```Java
|
49
49
|
package application;
|
50
50
|
|
51
|
+
import java.util.Arrays;
|
52
|
+
|
51
53
|
import javafx.application.Application;
|
52
54
|
import javafx.beans.value.ChangeListener;
|
53
55
|
import javafx.beans.value.ObservableValue;
|
7
変更!
answer
CHANGED
@@ -85,8 +85,11 @@
|
|
85
85
|
});
|
86
86
|
// 編集時のコミットイベント
|
87
87
|
listView.setOnEditCommit((t) -> {
|
88
|
+
System.out.println("onEditCommit");
|
89
|
+
System.out.println("begin:" + Arrays.toString(names.toArray()));
|
90
|
+
// 変更内容をObservableListに反映
|
88
91
|
t.getSource().getItems().set(t.getIndex(), t.getNewValue());
|
89
|
-
System.out.println("
|
92
|
+
System.out.println("end:" + Arrays.toString(names.toArray()));
|
90
93
|
});
|
91
94
|
// root
|
92
95
|
final BorderPane root = new BorderPane();
|
6
追記
answer
CHANGED
@@ -40,10 +40,10 @@
|
|
40
40
|
|
41
41
|
`select(1)`に書き換えると1行目(画面上は2行目)の`Green`を選択します。
|
42
42
|
|
43
|
-
3, setEditableは編集できなくするで正しいですが。
|
43
|
+
3, setEditableは編集できなくするで正しいですが。サンプルコードで動きを確認しながらのほうが動作が理解しやすいと思うので。
|
44
44
|
|
45
45
|
以下サンプルを実行してみてください。編集したいセルをクリック後にEnterキーで内容の編集ができます。
|
46
|
-
setEditableのtrueとfalseの行をコメントアウトで変えつつ、動作確認してみてくださいな。
|
46
|
+
`setEditable`の`true`と`false`の行をコメントアウトで変えつつ、動作確認してみてくださいな。
|
47
47
|
|
48
48
|
```Java
|
49
49
|
package application;
|
5
サンプルを追加
answer
CHANGED
@@ -40,4 +40,65 @@
|
|
40
40
|
|
41
41
|
`select(1)`に書き換えると1行目(画面上は2行目)の`Green`を選択します。
|
42
42
|
|
43
|
-
3, setEditableは編集できなくするで正しいですが。
|
43
|
+
3, setEditableは編集できなくするで正しいですが。
|
44
|
+
|
45
|
+
以下サンプルを実行してみてください。編集したいセルをクリック後にEnterキーで内容の編集ができます。
|
46
|
+
setEditableのtrueとfalseの行をコメントアウトで変えつつ、動作確認してみてくださいな。
|
47
|
+
|
48
|
+
```Java
|
49
|
+
package application;
|
50
|
+
|
51
|
+
import javafx.application.Application;
|
52
|
+
import javafx.beans.value.ChangeListener;
|
53
|
+
import javafx.beans.value.ObservableValue;
|
54
|
+
import javafx.collections.FXCollections;
|
55
|
+
import javafx.collections.ObservableList;
|
56
|
+
import javafx.scene.Scene;
|
57
|
+
import javafx.scene.control.Label;
|
58
|
+
import javafx.scene.control.ListView;
|
59
|
+
import javafx.scene.control.cell.TextFieldListCell;
|
60
|
+
import javafx.scene.layout.BorderPane;
|
61
|
+
import javafx.stage.Stage;
|
62
|
+
|
63
|
+
public class A146717 extends Application {
|
64
|
+
|
65
|
+
@Override
|
66
|
+
public void start(final Stage stage) throws Exception {
|
67
|
+
stage.setTitle("A146717");
|
68
|
+
final Label label = new Label();
|
69
|
+
ObservableList<String> names = FXCollections.observableArrayList("Blue", "Green", "Yellow", "Cyan", "Red",
|
70
|
+
"White", "Black");
|
71
|
+
|
72
|
+
ListView<String> listView = new ListView<String>(names);
|
73
|
+
listView.setPrefWidth(80);
|
74
|
+
listView.setPrefHeight(120);
|
75
|
+
listView.setEditable(true); // 編集したい時
|
76
|
+
//listView.setEditable(false); // 編集したくない時
|
77
|
+
// TextFieldに
|
78
|
+
listView.setCellFactory(TextFieldListCell.forListView());
|
79
|
+
listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
|
80
|
+
@Override
|
81
|
+
public void changed(ObservableValue<? extends String> ov, String old_val, String new_val) {
|
82
|
+
label.setText(new_val + "が選択されました。");
|
83
|
+
}
|
84
|
+
|
85
|
+
});
|
86
|
+
// 編集時のコミットイベント
|
87
|
+
listView.setOnEditCommit((t) -> {
|
88
|
+
t.getSource().getItems().set(t.getIndex(), t.getNewValue());
|
89
|
+
System.out.println("onEditCommit");
|
90
|
+
});
|
91
|
+
// root
|
92
|
+
final BorderPane root = new BorderPane();
|
93
|
+
root.setLeft(listView);
|
94
|
+
root.setBottom(label);
|
95
|
+
stage.setScene(new Scene(root, 400, 320));
|
96
|
+
stage.show();
|
97
|
+
}
|
98
|
+
|
99
|
+
public static void main(String[] args) {
|
100
|
+
launch(args);
|
101
|
+
}
|
102
|
+
|
103
|
+
}
|
104
|
+
```
|
4
追記
answer
CHANGED
@@ -12,8 +12,8 @@
|
|
12
12
|
|
13
13
|
分かりやすい説明=厳密な説明ではないので、できるだけmicrosoft.com関係のサイトを正としてくださいな。
|
14
14
|
|
15
|
-
リストボックスの選択モードの[setSelectionMode](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/MultipleSelectionModel.html#setSelectionMode-javafx.scene.control.SelectionMode-)
|
16
|
-
|
15
|
+
リストボックスの選択モードの[setSelectionMode](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/MultipleSelectionModel.html#setSelectionMode-javafx.scene.control.SelectionMode-)は引数が列挙型の[SelectionMode](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SelectionMode.html)です。
|
16
|
+
> SelectionModeのページより引用
|
17
17
|
>SINGLE
|
18
18
|
>一度に1つのアイテムのみを選択できるようにします。
|
19
19
|
>MULTIPLE
|
@@ -21,13 +21,15 @@
|
|
21
21
|
|
22
22
|
ListViewには単一選択リスト(SINGLE)と複数選択リスト(MULTIPLE)のモードがあります。
|
23
23
|
|
24
|
-
質問文の「選択モデルとはなにか?」の疑問の回答は
|
25
|
-
[SelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SelectionModel.html
|
24
|
+
質問文の「選択モデルとはなにか?」の疑問の回答は[SelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SelectionModel.html)です。このクラスが選択モデルです。
|
26
|
-
です。このクラスが選択モデルです。
|
27
|
-
このクラスを継承して、単一選択リスト[SingleSelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SingleSelectionModel.html)
|
28
|
-
と複数選択リスト[MultipleSelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/MultipleSelectionModel.html)
|
29
|
-
があります。
|
30
25
|
|
26
|
+
|モード|クラス|
|
27
|
+
|:--|:--:|
|
28
|
+
|単一選択リスト|[SingleSelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SingleSelectionModel.html)|
|
29
|
+
|複数選択リスト|[MultipleSelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/MultipleSelectionModel.html)|
|
30
|
+
|
31
|
+
選択モデルを親クラスとしてモード毎にクラスが別れます。
|
32
|
+
|
31
33
|
1, `listView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);`は単一選択リストモードの設定をしています。
|
32
34
|
試しに`SelectionMode.SINGLE`を`SelectionMode.MULTIPLE`に変更し、`Shift`キーを押しながら、右側の`Blue`と`Green`をクリックしてみてください。
|
33
35
|
複数選択できるようになります。これが複数選択リストです。
|
3
追記
answer
CHANGED
@@ -6,4 +6,36 @@
|
|
6
6
|
|
7
7
|
[リストボックス](https://wa3.i-3-i.info/word11631.html)
|
8
8
|
[リストボックス | http://e-words.jp](http://e-words.jp/w/%E3%83%AA%E3%82%B9%E3%83%88%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9.html)
|
9
|
-
[リストボックス 使用パターン | msdn.microsoft.com](https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa511484.aspx#patterns)
|
9
|
+
[リストボックス 使用パターン | msdn.microsoft.com](https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa511484.aspx#patterns)
|
10
|
+
|
11
|
+
---
|
12
|
+
|
13
|
+
分かりやすい説明=厳密な説明ではないので、できるだけmicrosoft.com関係のサイトを正としてくださいな。
|
14
|
+
|
15
|
+
リストボックスの選択モードの[setSelectionMode](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/MultipleSelectionModel.html#setSelectionMode-javafx.scene.control.SelectionMode-)
|
16
|
+
|
17
|
+
>SINGLE
|
18
|
+
>一度に1つのアイテムのみを選択できるようにします。
|
19
|
+
>MULTIPLE
|
20
|
+
一度に1つ以上の連続したインデックス範囲を選択できるようにします。
|
21
|
+
|
22
|
+
ListViewには単一選択リスト(SINGLE)と複数選択リスト(MULTIPLE)のモードがあります。
|
23
|
+
|
24
|
+
質問文の「選択モデルとはなにか?」の疑問の回答は
|
25
|
+
[SelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SelectionModel.html#select-int-)
|
26
|
+
です。このクラスが選択モデルです。
|
27
|
+
このクラスを継承して、単一選択リスト[SingleSelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SingleSelectionModel.html)
|
28
|
+
と複数選択リスト[MultipleSelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/MultipleSelectionModel.html)
|
29
|
+
があります。
|
30
|
+
|
31
|
+
1, `listView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);`は単一選択リストモードの設定をしています。
|
32
|
+
試しに`SelectionMode.SINGLE`を`SelectionMode.MULTIPLE`に変更し、`Shift`キーを押しながら、右側の`Blue`と`Green`をクリックしてみてください。
|
33
|
+
複数選択できるようになります。これが複数選択リストです。
|
34
|
+
|
35
|
+
2, `listView.getSelectionModel().select(0);`
|
36
|
+
この行は`listbox`の項目の0行目(0から始まる、0オリジンといいます)を選択しています。
|
37
|
+
参考[SelectionModel#select](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SelectionModel.html#select-int-)
|
38
|
+
|
39
|
+
`select(1)`に書き換えると1行目(画面上は2行目)の`Green`を選択します。
|
40
|
+
|
41
|
+
3, setEditableは編集できなくするで正しいですが。サンプルコードを実行した方が分かりやすいと思うので、少しサンプルを作ります。
|
2
追記
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
> 読み解き方
|
2
2
|
|
3
|
-
GUIアプリは作りたい画面がまず背景としてあります。前提となるGUI(今回の場合はListBox)の知識がないと、コード上で何をやっているのか公式ドキュメント(JavaDoc)からは理解しずらいと思います。
|
3
|
+
GUIアプリは作りたい画面がまず背景としてあります。前提となるGUIコントロール(今回の場合はListBox)の知識がないと、コード上で何をやっているのか公式ドキュメント(JavaDoc)からは理解しずらいと思います。
|
4
4
|
|
5
5
|
3つ参考になりそうなリンクを貼りましたので、このページをザッと読んでみてくださいな。
|
6
6
|
|
1
追記
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
> 読み解き方
|
2
2
|
|
3
|
-
GUIアプリは作りたい画面がまず背景としてあります。前提となるGUI(今回の場合はListBox)の知識がないと、コード上で何をやっているのか公式ドキュメントから理解しずらいと思います。
|
3
|
+
GUIアプリは作りたい画面がまず背景としてあります。前提となるGUI(今回の場合はListBox)の知識がないと、コード上で何をやっているのか公式ドキュメント(JavaDoc)からは理解しずらいと思います。
|
4
4
|
|
5
5
|
3つ参考になりそうなリンクを貼りましたので、このページをザッと読んでみてくださいな。
|
6
6
|
|