Как настроить функциональность setCellValueFactory в TableView JavaFX - PullRequest
0 голосов
/ 16 октября 2019

У меня есть класс данных Kotlin:

data class DataContainer(var descriptor: String = "",
                         var amount: Double = 0.0,
                         val composition: MutableMap<String, Double> = mutableMapOf(),
                         var date: LocalDate = now())

Экземпляры этого должны быть добавлены в виде записей в JavaFX TableView. Добавление всего, кроме композиции, работает со стандартом TableColumn

.setCellValueFactory(new PropertyValueFactory<>())

со связанными типами в <> и именами в () класса PropertyValueFactory, например:

tableColumnDC_date.setCellValueFactory(new PropertyValueFactory<DataContainer, LocalDate>("date"));

К сожалению,С композицией (Hash) Map все немного сложнее. Я получаю очень некрасивый вывод в связанный столбец, просто используя вышеупомянутую стандартную процедуру, такую ​​как

tableColumnDC_comp.setCellValueFactory(new PropertyValueFactory<DataContainer, HashMap<String, Double>>("composition"));

. Вот почему я хотел бы настроить метод setCellValueFactory.

Я хотел бы создать настраиваемыйвыходная строка, поскольку строки, содержащие "\ n", являются самым простым способом аккуратно организовать вывод в одну строку. Есть предложения?

1 Ответ

3 голосов
/ 16 октября 2019

Вы можете поместить любое желаемое значение String в ячейку, поместив его в ReadOnlyStringWrapper, созданный в setCellValueFactory. Это лучший вариант, чем PropertyValueFactory, так как он не использует отражение, поэтому безопасен для типов.

Например, приведенный ниже код выдаст вам все значения на карте, разделенные символами новой строки.

tableColumnDC_comp.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().getMap().values().stream().collect(Collectors.joining("\n")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...