Как выбрать несколько записей в tableview javafx

TableView
Класс javafx.scene.control.TableView<S>
предназначен для создания табличных представлений. С помощью параметра S в угловых скобках определяется тип данных, которые будут отображаться в таблице.
Для создания TableView можно принять один из двух конструкторов класса:
- TableView(): создает пустую таблицу
- TableView(ObservableList<S> items): создает таблицу, заполненную данными из коллекции items
Определение данных
Для начала нам надо определить данные, которые будут выводиться в таблице. Для этого создадим новый файл Person.java, в котором определим следующий класс Person
Основну класса Person составляют свойства name и age, которые имеют тип SimpleStringProperty и SimpleIntegerProperty соответственно. Фактически эти типы представляю надстройку над стандартными типами String и Integer. В целом пакет javafx.beans.property еще ряд типов, которые можно использовать для определения свойств в зависимости от типа данных, которые мы хотим сохранить:
-
SimpleBooleanProperty
-
SimpleIntegerProperty
-
SimpleDoubleProperty
-
SimpleFloatProperty
-
SimpleLongProperty
-
SimpleStringProperty
-
SimpleMapProperty<K, V>
-
SimpleListProperty<E>
-
SimpleSetProperty<E>
-
SimpleObjectProperty<T>
Каждый подобный тип определяет метод get(), который возвращает хранимые данные, и метод set(), которые устанавливает данные.
При этом методы доступа — геттеры и аксессоры определять необязательно.
Определение столбцов
Любая таблица представляет набор ячеек, которые образуют на пересечении строк и столбцов. Каждая строка в таблице отображает отдельный элемент из коллекции ObservableList, которая передается через конструктор в TableView. В нашем случае каждая отдельная строка будет представлять отдельные объкт класс Person.
Для определения столбцов в TableView применяется класс TableColumn<S, T>. Объект TableColumn типизируется двумя типами: параметр S представляе тот же тип, которым тизирован объект TableView (тип отображаемых в таблице данных), а параметр T передает тип данных в рамках данного столбца.
С помощью конструктора TableColumn можно определить заголовок столбца:
После определения столбца для него надо установить фабрику генерации значения с помощью метода setCellValueProperty(). Фабрика определяет, как ячейка будет получать значение.
В данном случае можно использовать встроенный класс javafx.scene.control.cell.PropertyValueFactory, который позволяет установить привязку столбца к определенному свойству данных с помощью конструктора:
После этого столбец надо добавить в коллекцию столбцов TableView.
Отобразим данные класса Person в таблице:
Скомпилируем оба класса (Person и Main) и запустим программу:
Получение выделенной строки
Для получения выделенных в TableView строк используется класс TableView.TableViewSelectionModel<S>. Для получения объекта этого класса у TableView вызывается метод getSelectionModel(). Например, выведем выделенный в таблице объект Person:
В данном случае информация о выделенной строке выводится в элементе Label. Для этого у TableView.TableViewSelectionModel вызывается метод selectedItemProperty()
, который возвращает объект ReadOnlyObjectProperty и предоставляет доступ к выбранному в таблице элементу. Для прослушивания изменений выделенного элемента у ReadOnlyObjectProperty вызывается метод addListener()
, который устанавливает слушателя изменений.
Слушатель представляет реализацию интерфейса ChangeListener. Интерфейс также типизируется типом Person — типом объектов в таблице. В методе changed этого интерфейса с помощью параметра newVal мы можем получить новый выбранный объект Person.
НазадСодержание