2014-08-29 3 views
3

Можно ли добавить изображение в список JavaFX ListView?Изображение в JavaFX ListView

Вот как я сейчас устанавливаю элементы списка.

private ListView<String> friends; 
private ObservableList<String> items; 
items = FXCollections.observableArrayList(getFriends); 
friends.setItems(items); 

Я также использую значение вида списка как идентификатор, чтобы узнать, какой из них выбран.

ответ

3

Внесите ListCell, который отображает изображение и устанавливает cellFactory на ListView. В примере standard oracle tutorial приведен пример реализации пользовательской ячейки списка.

Вы бы сделать что-то по следующим направлениям:

friends.setCellFactory(listView -> new ListCell<String>() { 
    private ImageView imageView = new ImageView(); 
    @Override 
    public void updateItem(String friend, boolean empty) { 
     super.updateItem(friend, empty); 
     if (empty) { 
      setText(null); 
      setGraphic(null); 
     } else { 
      Image image = getImageForFriend(friend); 
      imageView.setImage(image); 
      setText(friend); 
      setGraphic(imageView); 
     } 
    } 
}); 

Метод updateItem(...) можно назвать довольно часто, так что это, вероятно, лучше предварительно загрузить изображения и сделать их доступными для клетки, а не создавать их каждый раз updateItem(...) называется.

+0

Спасибо, я довольно новичок в JavaFX, и я изо всех сил пытался понять, как работает фабрика ячеек. Этот код работает безупречно: D – Ricktza

0

не забудьте обновить или загрузить свой ListView с помощью myListViewWithPath.setItems (myObserverFilledWithImages);

@FXML 
    private void browseButton(ActionEvent event) throws Exception { 
     System.out.println("browseButton"); 
     DirectoryChooser chooser = new DirectoryChooser(); 
     File file = chooser.showDialog(myStage); 
     file = new File("E:\\FOLDER\\Imagen_File"); 

     if (file != null) { 
      directoryField.setText(file.toString()); 
      oImage.setAll(load(file.toPath())); 
     } 
     imageFilesList.setItems(oImage); //this one load or refresh the ListView 
    }