Kotlin编写JavaFX的顺滑之数据控件(一)列表视图ListView

Kotlin+JavaFX系列

  1. 使用Kotlin开发JavaFX
  2. Windows下的JavaFX桌面应用程序打包ABC
  3. Kotlin编写JavaFX的顺滑
  4. JavaFX动画:有趣的AnimationTimer
  5. JavaFX应用程序图标
  6. JavaFX专业开发者与业余开发者之间就差一个一个Icon packs
  7. JavaFX七巧板游戏:布局窗格Panes
  8. JavaFX七巧板游戏:布局控件
  9. JavaFX+Kotlin游戏从入门到放弃:拯救蛇蛇大作战又名454行实现几何数独游戏
  10. Kotlin编写JavaFX的顺滑之数据控件(一)列表视图ListView
  11. Kotlin编写JavaFX的顺滑之数据控件(二)表视图TableView基础应用
  12. Kotlin编写JavaFX的顺滑之数据控件(二)表视图TableView基础深入浅出

效果先行

一个列表视图控件,可以实现展示一系列项,每一个项对应ListView界面中的一行。这个控件很简单,但是也很好用。当采用Kotlin编写的时候,就更好用了。

  • 增加项
  • 清除项
  • 选择项
  • 原位编辑
    列表试图

再给代码

data class Kid(
    var firstname: String = "",
    var middleName: String = "",
    var lastname: String = "",
    var age: Int = 0
)

class DefaultFocusInScope {
   
   
    private val _ff = SimpleBooleanProperty(false)

    /**
     * Set n be the focused node in the scope, when focused, call func
     * @param n Node
     * @param func Function0<Unit>
     */
    fun focusNode(n: Node, func: () -> Unit) {
   
   
        _ff.addListener {
   
    _, _, _ ->
            Platform.runLater {
   
   
                n.requestFocus()
                func()
            }
        }
    }

    /**
     * set focus to the default focused node in this scope.
     */
    fun focus() {
   
   
        _ff.value = !(_ff.value)
    }
}

fun randString(len: Int = 10, from: Int = 97, until: Int = 122) = (1..len).map {
   
   
    Random.nextInt(from, until).toChar()
}.toTypedArray().joinToString(separator = "") {
   
    "$it" }


fun listViewDemo(): Parent {
   
   
    val names = SimpleObjectProperty(FXCollections.observableArrayList<Kid>())

    return BorderPane().apply {
   
   
        padding = Insets(5.0)
        center = ListView<Kid>().apply {
   
   
            isEditable = true
            itemsProperty().bindBidirectional(names)
            setCellFactory {
   
   
                object : ListCell<Kid>() {
   
   
                    val thisKid = SimpleObjectProperty(Kid())
                    override fun updateItem(item: Kid?, empty: Boolean) {
   
   
                        super.updateItem(item, empty)
                        if (!empty && item != null) {
   
   
                            graphic = HBox().apply {
   
   
                                thisKid.value = item
                                children.add(Label(item.firstname).apply {
   
   
                                    HBox.setHgrow(this, Priority.ALWAYS)
                                    maxWidth = Double
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大福是小强

除非你钱多烧得慌……

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值