libro
www.tuyano.com
初心者のためのJavaFXプログラミング入門

ListViewとSelectionModel (3/5)

作成:2014-12-20 13:23
更新:2014-12-20 13:23

■ListViewのクリックイベント処理

ListViewに表示された項目をクリックして何かの処理を実行させたい、というような場合にはどうすればいいのでしょう。ListViewには、アクションイベントが用意されていません。ですから、クリックして何かを行うには別のイベントを用意する必要があります。

ここでは「MouseClick」というイベントを利用してみましょう。これは、その名の通りマウスでクリックした時に発生するイベントです。このイベントは「setOnMouseClicked」というメソッドを使って組み込むことができます。
《ListView》.setOnMouseClicked(new EventHandler<MouseEvent>(){
    @Override
    public void handle(MouseEvent event){
        // 実行する処理
    }
});

こんな感じですね。ただし、Java8ではこうしたイベントの組み込みはラムダ式を使うのが基本ですから、一般的には以下のようにかくことになるでしょう。
《ListView》.setOnMouseClicked((MouseEvent)->{
    // 実行する処理
}

こちらのほうがずいぶんと簡単ですね。では、実際の利用例を挙げておきましょう。下のリストは、リストの項目をクリックするとそのテキストをLabel1に表示するサンプルです。setOnMouseClickedを利用すれば簡単にリストの項目をクリックした処理が追加できます。

※ただし、ListViewで項目を選択した時のイベント処理を行うには、実はMouseClickは最適ではありません。この後で説明するChangeListenerを利用したほうがベターでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package com.tuyano.libro;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.collections.FXCollections;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;


public class AppController implements Initializable {
    @FXML Label label1;
    @FXML ListView<String> list1;
    @FXML Button btn1;
    
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        list1.setItems(FXCollections.observableArrayList());
        list1.getItems().add("One");
        list1.getItems().add("Two");
        list1.getItems().add("Three");
        
        list1.setOnMouseClicked((MouseEvent)->{
            Object obj = list1.getSelectionModel().getSelectedItem();
            label1.setText(obj.toString());
        });

        btn1.setOnAction((AtionEvent)->{
            String obj = list1.getSelectionModel().getSelectedItem();
            label1.setText("you selected: \"" + obj + "\".");
        });
    }

}
※関連コンテンツ

「初心者のためのJavaFXプログラミング入門」に戻る