回答編集履歴

8

import文を追加

2018/09/15 09:52

投稿

umyu
umyu

スコア5846

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

変更!

2018/09/15 09:52

投稿

umyu
umyu

スコア5846

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("onEditCommit");
183
+ System.out.println("end:" + Arrays.toString(names.toArray()));
178
184
 
179
185
  });
180
186
 

6

追記

2018/09/15 09:48

投稿

umyu
umyu

スコア5846

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

サンプルを追加

2018/09/15 09:33

投稿

umyu
umyu

スコア5846

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

追記

2018/09/15 09:31

投稿

umyu
umyu

スコア5846

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
- このクラスを継承して、単一選択リスト[SingleSelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/SingleSelectionModel.html)
51
+ |モード|クラス|
54
52
 
55
- と複数選択リスト[MultipleSelectionModel](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/MultipleSelectionModel.html)
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

追記

2018/09/15 09:06

投稿

umyu
umyu

スコア5846

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

追記

2018/09/15 09:02

投稿

umyu
umyu

スコア5846

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

追記

2018/09/15 07:58

投稿

umyu
umyu

スコア5846

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