2017-08-02 15 views
0

は、次の例を考えてみましょう:TornadoFXノードスタイル(またはstyleClass)をプロパティにバインドする方法は?

class MainView : View("Example") { 
    val someBooleanProperty: SimpleBooleanProperty = SimpleBooleanProperty(true) 
    override val root = borderpane { 
     paddingAll = 20.0 
     center = button("Change bg color") { 
      action { 
       // let's assume that new someBooleanProperty value is updated 
       // from some API after button clicked 
       // so changing style of the borderpane in action block 
       // of the button is not the solution 
       someBooleanProperty.value = !someBooleanProperty.value 
      } 
     } 
    } 
} 

class Styles : Stylesheet() { 
    companion object { 
     val red by cssclass() 
     val green by cssclass() 
    } 

    init { 
     red { backgroundColor += Color.RED } 
     green { backgroundColor += Color.GREEN } 
    } 
} 

はどのようにして動的にsomeBooleanProperty(例えばRED trueとGREEN false)に応じて、borderpaneの背景色を変更できますか? CSSクラスをプロパティにバインドする可能性はありますか?

答えて

1

クラスを切り替える(ブールプロパティに基づいてクラスを追加または削除する)場合は、Node.toggleClass(CssRule, ObservableValue<Boolean>)関数を使用することができます。

val someBooleanProperty = SimpleBooleanProperty(true) 
... 
borderpane { 
    toggleClass(Styles.red, someBooleanProperty) 
    toggleClass(Styles.green, someBooleanProperty.not()) 
} 

一方で、あなたは変更クラスの値にバインドする、場合、あなたはNode.bindClass(ObservableValue<CssRule>)機能を使用することができます。

val someClassyProperty = SimpleObjectProperty(Styles.red) 
... 
borderpane { 
    bindClass(someClassyProperty) 
} 

次に、クラスを任意に設定できます。

+0

完璧、たくさんありがとう! – sk1ey

関連する問題