Eclipseを使って、JavaFXを勉強しています。以下のコードは
レイアウトの練習問題です。ListViewを作る箇所がよく理解できないので困っています。
ネットでわからない所は検索しながらコメントにして読んでみるのですが、
分かるようなわからないような、要するに理解ができていないのですね。
listView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
を順番に説明していただけませんか。長いコードなので、読み解き方を
教えてください。
listView.getSelectionModel().select(0);のslect(0)は何か、
「選択モデル」の意味が分かりません。
listView.setEditable(false);でfalseにセットすると、編集できなくするという事でしょうか。
以上たくさんありますが、listViewのところが分からないという事です。
よろしくお願いいたします。
package application; import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.scene.control.Label; import javafx.scene.control.ListView; import javafx.scene.control.SelectionMode; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class chapter3_3 extends Application { @Override public void start(Stage stage) throws Exception { stage.setTitle("chapter3_3"); stage.setWidth(300); stage.setHeight(180); Label label = new Label(); AnchorPane.setTopAnchor(label, 95.0); // labelを枠の上の位置に95pxの幅でセットする AnchorPane.setLeftAnchor(label,5.0); // labelを枠の左から5pxの位置にセットする Button topBtn[] = new Button[3]; for(int i=0; i<3; i++) { topBtn[i] = new Button(Integer.toString(i)); topBtn[i].setPrefWidth(60); String txt = String.format("button%dがクリックされました。", i); topBtn[i].setOnAction(event ->label.setText(txt)); } HBox top = new HBox(5); top.getChildren().addAll(topBtn); VBox left = new VBox(); CheckBox checkBox[] =new CheckBox[4]; for(int i=0; i<4; i++) { String txt = "CheckBox" + Integer.toString(i); checkBox[i] = new CheckBox(txt); checkBox[i].setPrefWidth(120); checkBox[i].setOnAction(event ->{ String s = ""; for(int j=0; j<4; j++) { if(checkBox[j].isSelected()) { s = s + checkBox[j].getText(); } } label.setText(s + "が選択されました。" ); }); } left.getChildren().addAll(checkBox); // ListViewを作る // ListViewは、ユーザーが選択できるか、ユーザーが対話できるアイテムの // 水平または垂直のリストを表示します。 // ListViewの要素は、items ObservableList内に含まれています。 // このObservableListはListViewによって自動的に監視されるため、 // ObservableList内でなんらかの変更が発生すると、 // その変更がListView自体に自動的に表示されます。 // ListView(ObservableList<T> items) // 指定されたObservableListから取得したコンテンツを垂直に積み上げる // デフォルトのListViewを作成します。 ObservableList<String> names = FXCollections.observableArrayList( "Blue","Green","Yellow","Cyan","Red","White","Black"); // リストに項目を登録するには,ObservableListのリストを作成して // コンストラクタ「ListView<String>(names)」に渡す。 ListView<String> listView = new ListView<String>(names); // 予め登録しておいた一連の項目の文字列からユーザーが // 1つまたは複数の項目を選択できるようになる。 // ListView<String>はジェネリクスなので、 // 作成するときは要素の型を指定する。 listView.setPrefWidth(80); listView.setPrefHeight(120); listView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); // ユーザーが選択できる項目を1つに制限するには「SelectionMode.SINGLE」を使う // SelectionModelは、一貫したAPIを提供して選択を維持するために // UIコントロールが使用する抽象クラスです。 // SelectionModel() デフォルトのSelectionModelインスタンスを作成します。 // setSelectionMode(SelectionMode value) // プロパティselectionModeの値を設定します。 listView.getSelectionModel().select(0); // 項目選択するときはlistView.getSelectionModel().select()を使う。 // SelectionModelは、プロパティの変更に対応したイベント処理機能を持っています。 // 例えば、SelectionModelにはSelectedItemというプロパティがあり、 // 選択した項目などはgetSelectedItemメソッドで取り出すことができました。 // getSelectionModel() 現在インストールされている選択モデルを返します。 listView.setEditable(false); // setEditable(boolean value) // プロパティeditableの値を設定します。 listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() { // このSelectedItemプロパティに「ChangeListener」というイベントリスナーを // 組み込むことで、値が変更された時のイベントをとらえて処理することができるようになります。 // ChangeListenerは、その名の通り値が変更された際に発生するイベント(ChangeEvent) // を処理するためのイベントリスナーです。 @Override public void changed(ObservableValue<? extends String> ov,String old_val,String new_val) { label.setText(new_val + "が選択されました。"); } }); // root BorderPane root = new BorderPane(); root.setTop(top); root.setLeft(left); root.setRight(listView); root.setBottom(label); stage.setScene(new Scene(root)); stage.show(); } public static void main(String[] args) { launch( args ); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/09/15 08:19
2018/09/15 08:41
退会済みユーザー
2018/09/15 09:10
退会済みユーザー
2018/09/15 09:32
2018/09/15 09:35
退会済みユーザー
2018/09/15 09:54
2018/09/15 09:55
2018/09/15 09:56
退会済みユーザー
2018/09/15 10:01
2018/09/15 10:05 編集
退会済みユーザー
2018/09/15 10:05
2018/09/15 10:06