在Kotlin TornadoFX上获取datepicker日期

时间:2017-12-28 09:34:09

标签: datepicker kotlin tornadofx

我正在为Kotlin学习TornadoFX的基础知识。 我有这段代码:

class MainView : View() {
    override val root = vbox()

    init {
        with(root) {
            datepicker {
                value = LocalDate.now()
            }
            button("Choose date") {
                textFill = Color.GREEN
                action {
                    println("Button pressed!")
                }
            }
        }
    }
}

按下按钮时,我想拍摄用户选择的日期。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

一种解决方案是将LocalDate属性绑定到DatePicker,如下所示:

class MainView : View() {

    private val dateProperty = SimpleObjectProperty<LocalDate>()

    override val root = vbox()

    init {
        with(root) {
            datepicker(dateProperty) {
                value = LocalDate.now()
            }
            button("Choose date") {
                textFill = Color.GREEN
                action {
                    val dateValue = dateProperty.value
                    println("Button pressed!")
                }
            }
        }
    }
}

另一个解决方案是在您的类中使用DatePicker实例,然后从中获取值,如下所示:

class MainView : View() {

    private var datePicker : DatePicker by singleAssign()

    override val root = vbox()

    init {
        with(root) {
            datePicker = datepicker {
                value = LocalDate.now()
            }
            button("Choose date") {
                textFill = Color.GREEN
                action {
                    val dateValue = datePicker.value
                    println("Button pressed!")
                }
            }
        }
    }
}

此外,您可以实施ViewModel,以分隔用户界面和逻辑,请参阅:Editing Models and Validation

此外,您的代码样式可以改进:您可以直接使用VBox,如下所示:

class MainView : View() {
    override val root = vbox {

        datepicker {
            value = LocalDate.now()
        }

        button("Choose date") {
            textFill = Color.GREEN
            action {
                println("Button pressed!")
            }
        }
    }      
}