import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class Main extends Application {

    public static void main(String[] args) {
        Application.launch(Main.class, args);
    }
    
    StringProperty listenerText = new SimpleStringProperty("");
    StringProperty logText = new SimpleStringProperty("");
    
    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("ListViewTest 7");
        Scene scene = new Scene(new Group());
        
        final ListView listView = new ListView();
        ObservableList listItems = javafx.collections.FXCollections.<String>observableArrayList();
        for (int i = 1; i <= 10; i++) {
            listItems.add("List Item " + i);
        }

        listView.getItems().clear();
        listView.getItems().addAll(listItems);
        
        listView.setOnMouseDragged(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                listenerText.set("ListView: Mouse Dragged");
            }
        });
        listView.setOnMouseMoved(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                listenerText.set("ListView: Mouse Moved");
            }
        });
        listView.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                listenerText.set("ListView: Mouse Pressed");
            }
        });
        listView.setOnMouseReleased(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                listenerText.set("ListView: Mouse Released");
            }
        });
        listView.setOnMouseEntered(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                listenerText.set("ListView: Mouse Entered");
            }
        });
        listView.setOnMouseExited(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                listenerText.set("ListView: Mouse Exited");
            }
        });
        
        
        Text text1 = new Text("Event - " + listenerText);
        text1.textProperty().bind(Bindings.concat("Event - ", listenerText));
        
        VBox vBox = new VBox(10);
        vBox.getChildren().addAll(text1, listView);
        
        ((Group) scene.getRoot()).getChildren().clear();
        ((Group) scene.getRoot()).getChildren().addAll(vBox);
        primaryStage.setScene(scene);
        primaryStage.show();
        listView.requestFocus();
    }
}