Передача данных в модель компонента: какая из этих реализаций соответствует лучшей практике разработки на Swing?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Передача данных в модель компонента: какая из этих реализаций соответствует лучшей практике разработки на Swing?

Сообщение Anonymous »

В моем приложении Kotlin Swing у меня есть MutableList, в который я хочу, чтобы пользователь мог добавлять и удалять записи. Я решил использовать JList с двумя JButton: один добавляет новый элемент в список, а другой удаляет выбранный элемент из списка.
Не могу понять, как лучше это реализовать. Вот два варианта, которые я придумал. Я надеюсь, что смогу получить ответ на следующие вопросы:
  • какой вариант определенно лучший
  • Какой вариант категорически не рекомендуется или это плохая практика, и почему.
Вариант 1
Скопируйте MutableList в массив и добавьте содержимое массива в JList с использованием DefaultListModel. Это означает, что мне нужно будет добавить прослушиватель при обновлении модели списка и обновить MutableList, чтобы он был «синхронизирован» с данными модели JList. Пример:
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 */
}
}
}

Кажется немного обременительным поддерживать синхронизацию данных модели JList с myList с помощью прослушивателей.
Вариант 2
Создайте подкласс AbstractListModel, который принимает ссылку на MutableList. Это избавит меня от необходимости добавлять прослушиватели и вручную синхронизировать данные друг с другом, поскольку JList будет изменять данные в исходном списке.
Пример:
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.
*/
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... conforms-t
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»