回答編集履歴
8
import文を追加
test
CHANGED
@@ -98,6 +98,10 @@
|
|
98
98
|
|
99
99
|
|
100
100
|
|
101
|
+
import java.util.Arrays;
|
102
|
+
|
103
|
+
|
104
|
+
|
101
105
|
import javafx.application.Application;
|
102
106
|
|
103
107
|
import javafx.beans.value.ChangeListener;
|
7
変更!
test
CHANGED
@@ -172,9 +172,15 @@
|
|
172
172
|
|
173
173
|
listView.setOnEditCommit((t) -> {
|
174
174
|
|
175
|
+
System.out.println("onEditCommit");
|
176
|
+
|
177
|
+
System.out.println("begin:" + Arrays.toString(names.toArray()));
|
178
|
+
|
179
|
+
// 変更内容をObservableListに反映
|
180
|
+
|
175
181
|
t.getSource().getItems().set(t.getIndex(), t.getNewValue());
|
176
182
|
|
177
|
-
System.out.println("
|
183
|
+
System.out.println("end:" + Arrays.toString(names.toArray()));
|
178
184
|
|
179
185
|
});
|
180
186
|
|
6
追記
test
CHANGED
@@ -82,13 +82,13 @@
|
|
82
82
|
|
83
83
|
|
84
84
|
|
85
|
-
3, setEditableは編集できなくするで正しいですが。
|
85
|
+
3, setEditableは編集できなくするで正しいですが。サンプルコードで動きを確認しながらのほうが動作が理解しやすいと思うので。
|
86
86
|
|
87
87
|
|
88
88
|
|
89
89
|
以下サンプルを実行してみてください。編集したいセルをクリック後にEnterキーで内容の編集ができます。
|
90
90
|
|
91
|
-
setEditableのtrueとfalseの行をコメントアウトで変えつつ、動作確認してみてくださいな。
|
91
|
+
`setEditable`の`true`と`false`の行をコメントアウトで変えつつ、動作確認してみてくださいな。
|
92
92
|
|
93
93
|
|
94
94
|
|
5
サンプルを追加
test
CHANGED
@@ -82,4 +82,126 @@
|
|
82
82
|
|
83
83
|
|
84
84
|
|
85
|
-
3, setEditableは編集できなくするで正しいですが。
|
85
|
+
3, setEditableは編集できなくするで正しいですが。
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
以下サンプルを実行してみてください。編集したいセルをクリック後にEnterキーで内容の編集ができます。
|
90
|
+
|
91
|
+
setEditableのtrueとfalseの行をコメントアウトで変えつつ、動作確認してみてくださいな。
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
```Java
|
96
|
+
|
97
|
+
package application;
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
import javafx.application.Application;
|
102
|
+
|
103
|
+
import javafx.beans.value.ChangeListener;
|
104
|
+
|
105
|
+
import javafx.beans.value.ObservableValue;
|
106
|
+
|
107
|
+
import javafx.collections.FXCollections;
|
108
|
+
|
109
|
+
import javafx.collections.ObservableList;
|
110
|
+
|
111
|
+
import javafx.scene.Scene;
|
112
|
+
|
113
|
+
import javafx.scene.control.Label;
|
114
|
+
|
115
|
+
import javafx.scene.control.ListView;
|
116
|
+
|
117
|
+
import javafx.scene.control.cell.TextFieldListCell;
|
118
|
+
|
119
|
+
import javafx.scene.layout.BorderPane;
|
120
|
+
|
121
|
+
import javafx.stage.Stage;
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
public class A146717 extends Application {
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
@Override
|
130
|
+
|
131
|
+
public void start(final Stage stage) throws Exception {
|
132
|
+
|
133
|
+
stage.setTitle("A146717");
|
134
|
+
|
135
|
+
final Label label = new Label();
|
136
|
+
|
137
|
+
ObservableList<String> names = FXCollections.observableArrayList("Blue", "Green", "Yellow", "Cyan", "Red",
|
138
|
+
|
139
|
+
"White", "Black");
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
ListView<String> listView = new ListView<String>(names);
|
144
|
+
|
145
|
+
listView.setPrefWidth(80);
|
146
|
+
|
147
|
+
listView.setPrefHeight(120);
|
148
|
+
|
149
|
+
listView.setEditable(true); // 編集したい時
|
150
|
+
|
151
|
+
//listView.setEditable(false); // 編集したくない時
|
152
|
+
|
153
|
+
// TextFieldに
|
154
|
+
|
155
|
+
listView.setCellFactory(TextFieldListCell.forListView());
|
156
|
+
|
157
|
+
listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
|
158
|
+
|
159
|
+
@Override
|
160
|
+
|
161
|
+
public void changed(ObservableValue<? extends String> ov, String old_val, String new_val) {
|
162
|
+
|
163
|
+
label.setText(new_val + "が選択されました。");
|
164
|
+
|
165
|
+
}
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
});
|
170
|
+
|
171
|
+
// 編集時のコミットイベント
|
172
|
+
|
173
|
+
listView.setOnEditCommit((t) -> {
|
174
|
+
|
175
|
+
t.getSource().getItems().set(t.getIndex(), t.getNewValue());
|
176
|
+
|
177
|
+
System.out.println("onEditCommit");
|
178
|
+
|
179
|
+
});
|
180
|
+
|
181
|
+
// root
|
182
|
+
|
183
|
+
final BorderPane root = new BorderPane();
|
184
|
+
|
185
|
+
root.setLeft(listView);
|
186
|
+
|
187
|
+
root.setBottom(label);
|
188
|
+
|
189
|
+
stage.setScene(new Scene(root, 400, 320));
|
190
|
+
|
191
|
+
stage.show();
|
192
|
+
|
193
|
+
}
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
public static void main(String[] args) {
|
198
|
+
|
199
|
+
launch(args);
|
200
|
+
|
201
|
+
}
|
202
|
+
|
203
|
+
|
204
|
+
|
205
|
+
}
|
206
|
+
|
207
|
+
```
|
4
追記
test
CHANGED
@@ -26,9 +26,9 @@
|
|
26
26
|
|
27
27
|
|
28
28
|
|
29
|
-
リストボックスの選択モードの[setSelectionMode](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/MultipleSelectionModel.html#setSelectionMode-javafx.scene.control.SelectionMode-)
|
29
|
+
リストボックスの選択モードの[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)です。
|
30
30
|
|
31
|
-
|
31
|
+
> SelectionModeのページより引用
|
32
32
|
|
33
33
|
>SINGLE
|
34
34
|
|
@@ -44,17 +44,21 @@
|
|
44
44
|
|
45
45
|
|
46
46
|
|
47
|
-
質問文の「選択モデルとはなにか?」の疑問の回答は
|
47
|
+
質問文の「選択モデルとはなにか?」の疑問の回答は[SelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SelectionModel.html)です。このクラスが選択モデルです。
|
48
48
|
|
49
|
-
[SelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SelectionModel.html#select-int-)
|
50
49
|
|
51
|
-
です。このクラスが選択モデルです。
|
52
50
|
|
53
|
-
|
51
|
+
|モード|クラス|
|
54
52
|
|
55
|
-
|
53
|
+
|:--|:--:|
|
56
54
|
|
55
|
+
|単一選択リスト|[SingleSelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SingleSelectionModel.html)|
|
56
|
+
|
57
|
+
|複数選択リスト|[MultipleSelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/MultipleSelectionModel.html)|
|
58
|
+
|
59
|
+
|
60
|
+
|
57
|
-
が
|
61
|
+
選択モデルを親クラスとしてモード毎にクラスが別れます。
|
58
62
|
|
59
63
|
|
60
64
|
|
3
追記
test
CHANGED
@@ -15,3 +15,67 @@
|
|
15
15
|
[リストボックス | 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)
|
16
16
|
|
17
17
|
[リストボックス 使用パターン | msdn.microsoft.com](https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa511484.aspx#patterns)
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
---
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
分かりやすい説明=厳密な説明ではないので、できるだけmicrosoft.com関係のサイトを正としてくださいな。
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
リストボックスの選択モードの[setSelectionMode](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/MultipleSelectionModel.html#setSelectionMode-javafx.scene.control.SelectionMode-)
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
>SINGLE
|
34
|
+
|
35
|
+
>一度に1つのアイテムのみを選択できるようにします。
|
36
|
+
|
37
|
+
>MULTIPLE
|
38
|
+
|
39
|
+
一度に1つ以上の連続したインデックス範囲を選択できるようにします。
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
ListViewには単一選択リスト(SINGLE)と複数選択リスト(MULTIPLE)のモードがあります。
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
質問文の「選択モデルとはなにか?」の疑問の回答は
|
48
|
+
|
49
|
+
[SelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SelectionModel.html#select-int-)
|
50
|
+
|
51
|
+
です。このクラスが選択モデルです。
|
52
|
+
|
53
|
+
このクラスを継承して、単一選択リスト[SingleSelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SingleSelectionModel.html)
|
54
|
+
|
55
|
+
と複数選択リスト[MultipleSelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/MultipleSelectionModel.html)
|
56
|
+
|
57
|
+
があります。
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
1, `listView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);`は単一選択リストモードの設定をしています。
|
62
|
+
|
63
|
+
試しに`SelectionMode.SINGLE`を`SelectionMode.MULTIPLE`に変更し、`Shift`キーを押しながら、右側の`Blue`と`Green`をクリックしてみてください。
|
64
|
+
|
65
|
+
複数選択できるようになります。これが複数選択リストです。
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
2, `listView.getSelectionModel().select(0);`
|
70
|
+
|
71
|
+
この行は`listbox`の項目の0行目(0から始まる、0オリジンといいます)を選択しています。
|
72
|
+
|
73
|
+
参考[SelectionModel#select](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SelectionModel.html#select-int-)
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
`select(1)`に書き換えると1行目(画面上は2行目)の`Green`を選択します。
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
3, setEditableは編集できなくするで正しいですが。サンプルコードを実行した方が分かりやすいと思うので、少しサンプルを作ります。
|
2
追記
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
GUIアプリは作りたい画面がまず背景としてあります。前提となるGUI(今回の場合はListBox)の知識がないと、コード上で何をやっているのか公式ドキュメント(JavaDoc)からは理解しずらいと思います。
|
5
|
+
GUIアプリは作りたい画面がまず背景としてあります。前提となるGUIコントロール(今回の場合はListBox)の知識がないと、コード上で何をやっているのか公式ドキュメント(JavaDoc)からは理解しずらいと思います。
|
6
6
|
|
7
7
|
|
8
8
|
|
1
追記
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
GUIアプリは作りたい画面がまず背景としてあります。前提となるGUI(今回の場合はListBox)の知識がないと、コード上で何をやっているのか公式ドキュメントから理解しずらいと思います。
|
5
|
+
GUIアプリは作りたい画面がまず背景としてあります。前提となるGUI(今回の場合はListBox)の知識がないと、コード上で何をやっているのか公式ドキュメント(JavaDoc)からは理解しずらいと思います。
|
6
6
|
|
7
7
|
|
8
8
|
|