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.
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 */
}
}
}
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.
*/
}