Übergabe von Daten an das Modell einer Komponente: Welche dieser Implementierungen entspricht der Best Practice für die Java

Java-Forum
Guest
 Übergabe von Daten an das Modell einer Komponente: Welche dieser Implementierungen entspricht der Best Practice für die

Post by Guest »

In meiner Kotlin Swing-Anwendung habe ich eine MutableList, zu der und aus der der Benutzer Einträge hinzufügen und daraus entfernen soll. Ich habe mich entschieden, JList mit zwei JButtons zu verwenden, einen, der der Liste ein neues Element hinzufügt, und einen, der ein ausgewähltes Element aus der Liste entfernt.
Ich weiß nicht, wie ich das am besten umsetzen kann. Hier sind die beiden Optionen, die ich mir ausgedacht habe. Ich hoffe, dass ich eine Antwort auf folgende Frage bekomme:
  • Welche Option ist definitiv die beste?
  • Welche Option ist? dringend abgeraten oder schlechte Praxis und warum.
Option 1
Kopieren Sie die MutableList zu einem Array hinzufügen und den Inhalt des Arrays zum hinzufügen JList mit DefaultListModel. Das bedeutet, dass ich den Listener sfor hinzufügen muss, wenn das Modell der Liste aktualisiert wird, und die MutableList aktualisieren muss, um sie „synchron“ mit den Modelldaten der JList zu halten. Beispiel:

Code: Select all

fun main() {
val myData = mutableListOf(/* Add a bunch of data */)

val myJList = JList(DefaultListModel()).apply {
model as DefaultListModel
model.addAll(myData.toTypedArray())

model.addListDataListener {
/* Manually update myData here for additions/deletions */
}
}
}
Es scheint etwas mühsam zu sein, die Modelldaten der JList mithilfe von Listenern mit myList synchron zu halten.
Option 2
Erstellen Sie eine Unterklasse von AbstractListModel, die einen Verweis auf eine MutableList annimmt. Dies erspart mir das Hinzufügen von Listenern und die manuelle Synchronisierung der Daten untereinander, da die JList die Daten in der ursprünglichen Liste ändern wird.
Beispiel:

Code: Select all

fun main() {
val myData = mutableListOf(/* Add a bunch of data */)

val myJList = JList(ReferenceListModel(myList))
}

class ReferenceListModel(
private val delegateList: MutableList,
) : AbstractListModel() {
/* In this class, I would implement all required methods per the superclass
* a and include public methods for adding and removing to the list.
* This would be editing the originally created list in main(), so I would not
* need to add listeners to this model in order to update the original list.
*/
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post