我如何使用 属性 创建自定义事件?

How can i make custom event with property?

如何制作自定义事件和自定义 属性 从 SceneBuilder/FXML 访问它? Should be available like this

这个来源给出了答案,但只给出了部分答案here

我需要这样的东西:

MyFragment.fxml

<SplitPane ......>
    <fx:script>
        function myFunction()
        {
            if(MyCustomControl.state){
                id0.setText('1111111')
            } else {
                id0.setText('2222222')
            }
        }
    </fx:script>
                           //How create this property? 
   <Label fx:id="id0" />   //           |              
                           //           V              
   <MyCustomControl        onMyCustomEvent="myFunction()"/>
</SplitPane>

对于 Kotlin:

val MY_CUSTOM_EVENT =
    EventType<Event>(Event.ANY, "MY_CUSTOM_EVENT" + UUID.randomUUID().toString())
var onOnlineClick = object : SimpleObjectProperty<EventHandler<Event>>() {
    override fun getBean(): Any {
        return this
    }

    override fun getName(): String {
        return "onMyCustomEvent"
    }

    override fun invalidated() {
        setEventHandler(MY_CUSTOM_EVENT, get())
    }
}

fun onMyCustomEvent(): ObjectPropertyBase<EventHandler<Event>> {
    return onMyCustomEvent
}

fun setOnMyCustomEvent(value: EventHandler<Event>) {
    onMyCustomEvent.set(value)
}

fun getOnMyCustomEvent(): EventHandler<Event> {
    return onMyCustomEvent.get()
}

某处属性

fun myProperty(): BooleanProperty {
    return myCustomProperty ?: run {
        myCustomProperty = object : SimpleBooleanProperty(false) {
            override fun invalidated() {
                fireEvent(Event(MY_CUSTOM_EVENT)) // <---this
            }

            override fun getBean(): Any {
                return this
            }

            override fun getName(): String {
                return "myProperty"
            }
        }
        return myCustomProperty as SimpleBooleanProperty
    }
}