1  import javafx.application.Application;
  2  import javafx.stage.Stage;
  3  import javafx.collections.FXCollections;
  4  import javafx.scene.Scene;
  5  import javafx.scene.control.ListView;
  6  import javafx.scene.control.ScrollPane;
  7  import javafx.scene.control.SelectionMode;
  8  import javafx.scene.image.ImageView;
  9  import javafx.scene.layout.BorderPane;
 10  import javafx.scene.layout.FlowPane;
 11  
 12  public class ListViewDemo extends Application {
 13    // Declare an array of Strings for flag titles
 14    private String[] flagTitles = {"Canada", "China", "Denmark",
 15      "France", "Germany", "India", "Norway", "United Kingdom",
 16      "United States of America"};
 17  
 18    // Declare an ImageView array for the national flags of 9 countries
 19    private ImageView[] ImageViews = {
 20      new ImageView("image/ca.gif"),
 21      new ImageView("image/china.gif"),
 22      new ImageView("image/denmark.gif"),
 23      new ImageView("image/fr.gif"),
 24      new ImageView("image/germany.gif"),
 25      new ImageView("image/india.gif"),
 26      new ImageView("image/norway.gif"),
 27      new ImageView("image/uk.gif"),
 28      new ImageView("image/us.gif")
 29    };
 30  
 31    @Override // Override the start method in the Application class
 32    public void start(Stage primaryStage) {
 33      ListView<String> lv = new ListView<>
 34        (FXCollections.observableArrayList(flagTitles));
 35      lv.setPrefSize(140, 400);
 36      lv.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
 37      
 38      // Create a pane to hold image views
 39      FlowPane imagePane = new FlowPane(10, 10);
 40      BorderPane pane = new BorderPane();
 41      pane.setLeft(new ScrollPane(lv));   
 42      pane.setCenter(imagePane);
 43  
 44      lv.getSelectionModel().selectedItemProperty().addListener(
 45        ov -> { 
 46          imagePane.getChildren().clear();
 47          for (Integer i: lv.getSelectionModel().getSelectedIndices()) {
 48            imagePane.getChildren().add(ImageViews[i]);
 49          }
 50      });
 51  
 52      // Create a scene and place it in the stage
 53      Scene scene = new Scene(pane, 450, 170);
 54      primaryStage.setTitle("ListViewDemo"); // Set the stage title
 55      primaryStage.setScene(scene); // Place the scene in the stage
 56      primaryStage.show(); // Display the stage
 57    }
 58  
 59    /**
 60     * The main method is only needed for the IDE with limited
 61     * JavaFX support. Not needed for running from the command line.
 62     */
 63    public static void main(String[] args) {
 64      launch(args);
 65    }
 66  }