У меня есть класс Market
, который содержит набор объектов MarketUpdate
с именем m_updates
. Для пользовательского интерфейса я использую конструкторы, безопасные для типов, для создания столбцов в табличном представлении следующим образом:
override val root = tableview<Market> {
val sortedMarketList = SortedList<Market>(markets)
sortedMarketList.comparatorProperty().bind(this.comparatorProperty())
items = sortedMarketList
...
column("Strikes", Market::m_strikes)
...
Свойство m_strikes
— это просто свойство SimpleIntegerProperty, непосредственно принадлежащее объекту Market
. Однако мне нужно иметь возможность создавать такие столбцы:
...
column("Created At", Market::m_updates::first::m_time)
...
...
column("Last Update", Market::m_updates::last::m_time)
...
где m_time
— свойство SimpleLongProperty, принадлежащее объекту MarketUpdate
. Когда объект Market
обновляется, новый объект MarketUpdate
добавляется в конец коллекции m_updates
. Это означает, что привязка должна автоматически переходить от одного объекта к другому, и что табличное представление должно быть уведомлено и обновлено, чтобы отразить данные в новом объекте. Я думаю, что привязка с помощью функций first()
и last()
коллекции, как описано выше, очень просто передает идею, но не компилируется.
Есть много свойств, таких как m_strikes
и m_time
. Как я могу добиться этого изящно?
val m_first = SimpleObjectProperty<MarketUpdate>(dummyMarketUpdate)
к объекту Market, обновить его при необходимости, а затем изменить строку столбца наcolumn("Created At", Market::m_first::get)
. Это требует, чтобы текст был установлен по строкамtext = it.m_time.get().toString()
, но это не имеет большого значения. К сожалению, это решение препятствует правильной работе функции сортировки таблицы. Возможно, он пытается выполнить сортировку на основе того, что было возвращено m_first.get(), а не текста, отображаемого в ячейке. - person HerdleDerdle   schedule 31.08.2017