Невозможно обновить данные отображения кнопки - PullRequest
0 голосов
/ 30 сентября 2019

Я учу Kotlin и TornadoFX программировать очень простую задачу: две кнопки, одна с Int 1, а другая с Int 200. Когда я нажимаю кнопку один, я хочу обновить и отобразить кнопку один с Int 2 идругие с Int 201. Следующая программа позволила мне проверить данные обновления, и все казалось правильным. У меня вопрос, почему отображение на кнопках не будет обновляться соответственно. Пожалуйста, помогите.

class MainView : View("Hello TornadoFX") {
    val controllera: ControllerA by inject()
    val i: Int? = 1
    val j: Int? = 2
    override val root = hbox {

        button(controllera.s1.toString()) {
            setOnAction {
                setId(i.toString())
                println("  in view button 1 s1: { ${controllera.s1.toString()} }")
                controllera.temp(i)
            }
        }
        button(controllera.s2.toString()) {
            setOnAction {
                setId(j.toString())
                println("  in view button 2 s2:  { ${controllera.s2.toString()} }")
                controllera.temp(j)
            }
        }
        label(title) {
            addClass(Styles.heading)
        }
    }
  }

class ControllerA :Controller(){
     var s1: Int =1
     var s2: Int = 200
    fun temp(k: Int?) {
        when( k) {
            1 -> {println("botton ID  " +k)
                println(" current value of s1:   $s1 ")
                s1 = s1+1
                println(" new value of s1 to update:   $s1 ")
                s2 = s2 +1
                println(" new value of s2 to update:   $s2 ")}
            2 -> {
                println("botton ID  " + k)
                println("current value of  s2:   $s2 ")}
            else -> println("default")
        }
    }
}


test output  at various location:
  in view button 1 s1: { 1 }    //In MainView
botton ID  1        //in ControllerA
 s1:   1 
 new value of s1 to update:   2 
 new value of s2 to update:   201 
  in view button 2 s2:  { 201 } //in MainView
botton ID  2            //in ControllerA
current value of  s2:   201
Note: those updated data will not be display on button text.

1 Ответ

0 голосов
/ 30 сентября 2019

Вам нужно использовать наблюдаемые свойства и привязки. Просто начинать писать код, не читая о фреймворке, не очень хороший подход. Я предлагаю вам прочитать руководство в качестве отправной точки. Вот ваш код, переписанный так, что каждая кнопка будет отображать и увеличивать соответствующее число при нажатии:

class MainView : View("Hello TornadoFX") {
    val controllera: ControllerA by inject()
    val myModel: MyModel by inject()

    override val root = hbox {

        button(myModel.s1.asString()) {
            action {
                controllera.inc(myModel.s1)
            }
        }
        button(myModel.s2.asString()) {
            action {
                controllera.inc(myModel.s2)
            }
        }
        label(title)
    }
}

class MyModel : ViewModel() {
    val s1 = SimpleIntegerProperty(1)
    val s2 = SimpleIntegerProperty(200)
}

class ControllerA : Controller() {
    fun inc(v: IntegerProperty) {
        v.value = v.value + 1
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...