So, ich habe einen Fall, in dem ich N Zeilen in Form von haben müssen: Label TextView/Checkbox
. Vielleicht muss ich mehr als diese beiden Ansichten haben, also möchte ich in der Lage sein, alles zu unterstützen, was TornadoFx View
ist.Erstellen Sie eine beliebige Ansicht
Ich habe eine Schnittstelle geschaffen, die eine Methode hat, die TornadoFx gibt View
und es sieht wie folgt aus:
interface ValueContainer {
fun getView() : View
}
Einer der Implementierungen wie folgt aussieht:
class BooleanValueContainer(val checked: Boolean) : ValueContainer {
val valueProperty = SimpleBooleanProperty(checked)
override fun getView(): View {
return (object : View() {
override val root = checkbox {
bind(valueProperty)
}
})
}
}
Jetzt, wenn ich versuche, es innerhalb init
Block zu verwenden, wird es nicht im Layout angezeigt. root
ist GridPane
und parameters
ist eine Liste von Objekten, die Namen und die Bezugnahme auf ValueContainer
Implementierung haben (BooleanValueContainer
oder andere, die ich nicht gezeigt):
init {
with(root) {
parameters.map {
row(it.name) {
it.parameterContainer.getView()
}
}
}
}
ich hier noch eine ganze Weile bin stecken und ich Ich habe versucht alles, was ich finden konnte, aber nichts funktionierte wirklich außer textview
oder checkbox
Block anstelle von getView()
Anruf, aber dann würde ich Logik haben auf welcher Ansicht sollte ich innerhalb dieser Klasse, die eine Ansicht darstellt, und ich will das nicht zeigen.
Weil ich verschiedene Ansichten für verschiedene Datentypen anzeigen muss. Z.B. Wenn der Datentyp ein boolescher Wert ist, brauche ich ein Kontrollkästchen, wenn es eine Zeichenfolge oder Nummer ist Ich brauche ein Textfeld, wenn es ein Array von Optionen ist, brauche ich Spinner/Combobox (nicht sicher über den Namen) –
Ich würde vorschlagen, in die Form-Komponente zu suchen. Überstreichen Sie Ihre Parameter, überprüfen Sie den Typ und fügen Sie den richtigen Feldeditor hinzu. Es scheint, als ob eine Ansicht pro Parameter übertrieben ist. –