2017-06-13 1 views
1

Je suis nouveau sur kotlin et tornadoFX. Dans Guide TornadoFX, un ToggleButton peut être construit avec les éléments suivants:Le bouton bascule tornadoFX n'a ​​pas de propriété de texte

togglebutton("OFF").action { text = if (isSelected) "ON" else "OFF" } 

Mais quand je copie les mêmes codes dans mon IDE, il est faux!

codes from guide copied to my IDE

Il semble qu'il n'y a pas de texte dans la propriété togglebutton à tornadoFX?

Répondre

3

Il semble que nous étions un peu désireux de mettre à jour le guide avec la nouvelle syntaxe .action, donc l'exemple dans le guide est réellement faux. Le code correct serait:

togglebutton("OFF") { 
    action { 
     text = if (isSelected) "ON" else "OFF" 
    } 
} 

La raison pour laquelle l'exemple dans le guide est erroné, est que lorsque vous appelez togglebutton("OFF").action { .. }, puis this l'intérieur de action {} est en fait le conteneur entourant la place du bouton.

Pour les actions qui ne fonctionnent pas sur le bouton lui-même, la syntaxe courte est correcte, mais si vous devez manipuler le bouton, vous devez utiliser la syntaxe complète afin que votre code s'exécute dans le contexte du bouton.

Sur une autre note, il pourrait être plus idiomatiques de créer un stringbinding pour représenter l'état du bouton, au lieu de mettre à jour manuellement dans le rappel d'action:

togglebutton { 
    val stateText = selectedProperty().stringBinding { 
     if (it == true) "ON" else "OFF" 
    } 
    textProperty().bind(stateText) 
} 
+0

je l'obtiens. Merci beaucoup! – CSY

+0

De rien. Reconnaissant pour chaque question et question rapportée :) –