回答編集履歴

8

import文を追加

2018/09/15 09:52

投稿

umyu
umyu

スコア5846

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

変更!

2018/09/15 09:52

投稿

umyu
umyu

スコア5846

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("onEditCommit");
92
+ System.out.println("end:" + Arrays.toString(names.toArray()));
90
93
  });
91
94
  // root
92
95
  final BorderPane root = new BorderPane();

6

追記

2018/09/15 09:48

投稿

umyu
umyu

スコア5846

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

サンプルを追加

2018/09/15 09:33

投稿

umyu
umyu

スコア5846

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

追記

2018/09/15 09:31

投稿

umyu
umyu

スコア5846

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#select-int-)
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

追記

2018/09/15 09:06

投稿

umyu
umyu

スコア5846

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

追記

2018/09/15 09:02

投稿

umyu
umyu

スコア5846

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

追記

2018/09/15 07:58

投稿

umyu
umyu

スコア5846

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