小编Alt*_*ine的帖子

JavaFX:在修改基础列表时更改过滤列表谓词

我有一个用 Kotlin 编写的 JavaFX 应用程序。该应用程序显示了一个都有日期的账单清单:

data class Bill(
    val date: LocalDate
    // ...
)
Run Code Online (Sandbox Code Playgroud)

账单存储在一个可观察列表中,由过滤列表包装。

我希望用户能够设置过滤账单的日期范围。除此之外,我希望该范围在修改基础账单列表时自动更改。该日期范围的下限和上限被保存为属性。

我已经尝试了两种方法:

  • 分配通过读取当前属性值过滤日期的单个谓词。当日期范围更改时,这不会重新过滤列表。如果有一种方法可以强制过滤列表在发生这种情况时重新过滤,那就太好了。

  • 绑定谓词属性,以便在更改范围属性时更新。这会导致在修改或访问账单时从过滤列表中抛​​出ArrayIndexOutOfBoundsExceptions 或NoSuchElementExceptions。我不太明白为什么会发生这种情况,以及所有这些绑定背后到底发生了什么。

这是正在发生的事情的简化示例:

import javafx.application.Application
import javafx.beans.binding.Bindings
import javafx.beans.binding.ObjectBinding
import javafx.beans.property.SimpleObjectProperty
import javafx.collections.FXCollections
import javafx.collections.ObservableList
import javafx.collections.transformation.FilteredList
import javafx.stage.Stage
import java.time.LocalDate
import java.util.function.Predicate

data class Bill(
    val date: LocalDate
)

class Example : Application() {
    private val bills: ObservableList<Bill> = FXCollections.observableArrayList()
    private val filteredBills: FilteredList<Bill> = FilteredList(bills)

    val latestBillDateBinding: ObjectBinding<LocalDate?> =
        Bindings.createObjectBinding({
            bills.maxOfOrNull { it.date } …
Run Code Online (Sandbox Code Playgroud)

data-binding javafx kotlin observablelist

5
推荐指数
1
解决办法
88
查看次数

标签 统计

data-binding ×1

javafx ×1

kotlin ×1

observablelist ×1