tornadofx主从表演示

import javafx.beans.property.SimpleListProperty
import javafx.collections.FXCollections
import tornadofx.*


class LearnApp : App(PersonMainView::class)

class Person(name: String, cars: List<Car>) {
    val nameProperty = stringProperty(name)
    var name by nameProperty

    val carsProperty = listProperty<Car>(FXCollections.observableArrayList(cars))
    var cars by carsProperty
}

class PersonModel : ItemViewModel<Person>() {
    val name = bind(Person::nameProperty)
    val cars: SimpleListProperty<Car> = bind(Person::carsProperty)
}

class Car(brand: String, model: String) {
    val brandProperty = stringProperty(brand)
    var brand by brandProperty

    val modelProperty = stringProperty(model)
    var model by modelProperty
}

class CarModel(car: Car? = null) : ItemViewModel<Car>(car) {
    val brand = bind(Car::brandProperty)
    val model = bind(Car::modelProperty)
}

class DataController : Controller() {
    val people = FXCollections.observableArrayList<Person>()

    init {
        people.addAll(
                Person("Person 1", listOf(Car("BMW", "M3"), Car("Ford", "Fiesta"))),
                Person("Person 2", listOf(Car("长安", "奔奔"), Car("哈弗", "H6")))
        )
    }
}

class PersonMainView : View() {
    val data: DataController by inject()
    val selectedPerson: PersonModel by inject()

    override val root = borderpane {
        center {
            tableview(data.people) {
                column("Name", Person::nameProperty)
                bindSelected(selectedPerson)
            }
        }
        right(PersonEditor::class)
    }
}

class PersonEditor : View() {
    val person: PersonModel by inject()
    val selectedCar : CarModel by inject()

    override val root = form {
        fieldset {
            field("Name") {
                textfield(person.name).required()
            }
            field("Cars") {
                tableview(person.cars) {
                    column("Brand", Car::brandProperty)
                    column("Model", Car::modelProperty)
                    bindSelected(selectedCar)
                    onUserSelect(2) {
                        find<CarEditor>().openModal()
                    }
                }
            }
            button("Save") {
                enableWhen(person.dirty)
                action {
                    person.commit()
                }
            }
        }
    }
}

class CarEditor : View("主从表演示") {
    val car: CarModel by inject()
    val person: PersonModel by inject()

    override val root = form {
        fieldset {
            field("Brand") {
                textfield(car.brand).required()
            }
            field("Model") {
                textfield(car.model).required()
            }
            button("Save").action {
                val index = person.cars.indexOf(car.item)

                car.commit {
                    person.cars[index] = car.item
                    close()
                }
            }
        }
    }
}

 

转载于:https://my.oschina.net/u/3820046/blog/3075193

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值