Mon application doit autoriser les ajouts à la liste. J'ai compris comment je peux ajouter dynamiquement à une liste en utilisant observableArrayList
. Si je clique sur le bouton, un élément est ajouté à la liste et affiché.Comment installer un gestionnaire de clics sur une liste dynamique (dans tornadofx)
Maintenant, j'ai du mal à ajouter un gestionnaire de clic (je veux gérer l'événement qui se produit lorsque quelqu'un clique sur un élément de la liste). Où est-ce que je fais ça?
Voici mon code.
package someapp
import javafx.collections.FXCollections
import javafx.geometry.Pos
import javafx.scene.layout.VBox
import javafx.scene.text.FontWeight
import tornadofx.*
class MyApp : App(HelloWorld::class) {
}
class HelloWorld : View() {
val leftSide: LeftSide by inject()
override val root = borderpane {
left = leftSide.root
}
}
class LeftSide: View() {
var requestView: RequestView by singleAssign()
override val root = VBox()
init {
with(root) {
requestView = RequestView()
this += requestView
this += button("Add Item") {
action {
requestView.responses.add(Request("example.com",
"/foo/bar",
"{ \"foo\" : \"bar\"}".toByteArray()))
}
}
}
}
}
class RequestView : View() {
val responses = FXCollections.observableArrayList<Request>(
)
override val root = listview(responses) {
cellFormat {
graphic = cache {
form {
fieldset {
label(it.hostname) {
alignment = Pos.CENTER_RIGHT
style {
fontSize = 22.px
fontWeight = FontWeight.BOLD
}
}
field("Path") {
label(it.path)
}
}
}
}
}
}
}
class Request(val hostname: String, val path: String, val body: ByteArray) {
}
C'est génial, merci. Je suis très reconnaissant de connaître les meilleures pratiques. Avec la nouvelle syntaxe, cependant, je ne suis pas tout à fait sûr de la façon dont j'obtiens des références aux vues. Par exemple, si je voulais ajouter une vue à HelloWorld (dans la bonne position), comment câbler 'onUserSelect (1)' pour que je puisse parler à l'instance de la vue de droite? Je suis un peu confus par l'utilisation de ':: class' parce que je suppose que je voudrais une référence à l'instance, pas la classe (ce qui se passe évidemment sous le capot, mais je ne sais pas comment je fais référence à l'objet instancié, et d'où (init?)). – xrd
Ou, où est la nouvelle syntaxe documentée? – xrd
Cette syntaxe est utilisée dans tout le guide. Si vous trouvez des exemples utilisant une syntaxe obsolète, veuillez soumettre un problème avec le projet guide et nous le mettrons à jour :) –