ListView listView отображает горизонтальный или вертикальный список элементов, из которых пользователь может выбирать или с которыми пользователь может взаимодействовать. ListView <T> использует обобщенный тип <Object>, по умолчанию интерпретируемый как <String>.
Содержимое списка задается специальным контейнером-коллекцией FX ObservableList<T>.
Отображение списка следует создавать в следующем порядке:
Модель (содержимое списка)
ObservableList<T> content = ...
Добавление модели к Представлению
listView.setItems(content);
Для выбора элемента списка или установки фокуса следует использовать экземпляры SelectionModel и FocusModel
listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);// установить множественный выбор
int index = listView.getSelectionModel().getSelectedIndex(); //получение номера элемента списка
Пример создания собственного обработчика выбора и фокуса.
listView.getSelectionModel().selectedItemProperty().addListener(
new ChangeListener<String>() {
public void changed(ObservableValue<? extends String> ov,
String old_val, String new_val) {
label.setText(new_val);
label.setTextFill(Color.web(new_val));
}
});
Для настройки визуального отображения элементов списка следует изменить заданное по умолчанию cell factory. Фабрика ячеек используется для создания ListCell экземпляров, которые используются для представления элемента в ListView.
Для этого надо
создать новый элемент отображения (product);
переопределить Фабрику cell;
Добавить созданную Фабрику к Представлению;
Пример отображения графического примитива Shape, отрисованного на канве :
class ShapeCell extends ListCell<Shape> {// класс Product
@Override
public void updateItem(Shape item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
Canvas cnv=new Canvas();
cnv.setHeight(60);// задание размера элемента отображения
cnv.setWidth(100);
GraphicsContext gr=cnv.getGraphicsContext2D();
Shape item1=(Shape)item.clone();//текущая фигура из списка ObservableList
item1.draw(gr,1,1); // ее отрисовка на канве
setGraphic(cnv); //установка канвы вместо cell
}
}
}
//Создание и добавление Фабрики к ListView listView
listView.setCellFactory(new Callback<ListView<Shape>,
ListCell<Shape>>() {
@Override
public ListCell<Shape> call(ListView<Shape> list) {
// здесь можно включить любую обработку
return new ShapeCell();
}
}
);