fun main(args: Array) { launch(args) } class RenameTest : App(FirstView::class) class MyData { val changeableNameProperty = SimpleStringProperty("Changeable Name") var changeableName by changeableNameProperty } // Initialize the ViewModel with a default instance of MyData class MyDataModel(data: MyData = MyData()) : ItemViewModel(data) { val changeableName = bind(MyData::changeableNameProperty) } class FirstView : View() { val myModel: MyDataModel by inject() override val root = borderpane { setPrefSize(1024.0, 768.0) top { squeezebox { fold { graphic = menubutton { bind(myModel.item.changeableNameProperty) item("Rename").action { find().openModal(stageStyle = StageStyle.UTILITY, escapeClosesWindow = true) } } bind(myModel.item.changeableNameProperty) graphicTextGap = 20.0 contentDisplay = ContentDisplay.RIGHT alignment = Pos.CENTER_RIGHT vbox { text("inside content") } } } } } override fun onDock() { super.onDock() setWindowMinSize(800.0, 600.0) } } class RenameDialog : Fragment("Rename") { val myModel: MyDataModel by inject() override val root = vbox { textfield(myModel.changeableName) paddingAll = 12 borderpane { left { button("cancel") { action { close() } } } right { button("save") { action { myModel.commit { close() } } } } } } }