0

したがって、次の形式で N 行が必要な場合がありますLabel TextView/Checkbox。おそらく、これらの 2 つ以上のビューが必要になるので、TornadoFx であるすべてのものをサポートできるようにしたいと考えていますView

TornadoFx を返す 1 つのメソッドを持つインターフェイスを作成しましたView。次のようになります。

interface ValueContainer {
    fun getView() : View
}

実装の 1 つは次のようになります。

class BooleanValueContainer(val checked: Boolean) : ValueContainer {

   val valueProperty = SimpleBooleanProperty(checked)

   override fun getView(): View {
       return (object : View() {
           override val root = checkbox {
               bind(valueProperty)
           }
       })
   }

}

今、ブロック内で使用しようとするとinit、レイアウトに表示されません。rootとはGridPane、名前と実装へのparameters参照を持つオブジェクトのリストです(または、私が示していない他のもの):ValueContainerBooleanValueContainer

init {
    with(root) {
        parameters.map {
            row(it.name) {
                it.parameterContainer.getView()
            }
        }
    }
}

私はかなり長い間ここで立ち往生しており、見つけることができるものはすべて試しましたが、呼び出しの代わりに配置textviewまたはcheckboxブロックする以外は実際には何も機能しませんでした.getView()ビューと私はそれを望んでいません。

4

1 に答える 1

1

これが機能しない理由は、単に呼び出すだけでparameterContainer.getView()、ビューを行に追加していないためです。あなたを混乱させているのは、ビルダーの場合label()、たとえば言うことができ、ビルダーツリーの現在のノードに追加されることだと思います。あなたの場合はLabel()、新しいラベルを作成しますが、現在のノードの子リストには追加しません。問題を解決するには、次のようにします。

this += it.parameterContainer.getView()

これにより、ビューが行に追加されます。

これとは別に、ValueContainer の要点がよくわかりません。このコンテナ オブジェクト内にビューを配置すると、何が解決されますか? これも誤解によるものではないかと思います。なぜこの構成が必要だと感じているのかを理解したいと思います。

于 2016-10-29T18:25:43.010 に答える