Java Swing: список моделей и коллекций - PullRequest
4 голосов
/ 15 июля 2011

В настоящее время я пишу программу, в которой много дублирования кода между аспектом GUI и аспектом хранения данных, и мне было интересно, соответствует ли мое предлагаемое решение приемлемым принципам проектирования.

По сути, я имеюнекоторые объекты данных, которые имеют список, содержащий некоторую дополнительную информацию.Затем графический интерфейс отображает объект и JList, который отображает всю информацию в списке объекта данных.В графическом интерфейсе пользователи могут добавлять или удалять информацию в списке объектов, и это визуально отражается в JList.

Однако это приводит к тому, что мне приходится поддерживать JList GUI и список объектов отдельно:

private void addInformation(String s) {
    this.listmodel.addElement(s);
    this.dataObject.getList().add(s);
}

(Очевидно, это очень простой пример, но вы поняли идею).Это также означает, что я занимаю вдвое больше памяти, удерживая оба списка.Было бы приемлемо для меня создать класс, который бы реализовывал интерфейсы ListModel и List, а затем нужно было бы обновить только один комбинированный list / listmodel?Я все еще учусь в универе и хочу сделать этот проект как можно лучше с точки зрения удобства сопровождения другими людьми и соблюдения передового опыта.

Ответы [ 3 ]

3 голосов
/ 15 июля 2011

Ваш графический интерфейс не должен содержать информацию о состоянии модели данных.Было бы лучше разделить его на модель Model-View-Controller (MVC).Где контроллер отвечает за создание объекта и обновление модели и просмотра соответственно.Ваш фактический вид должен просто отвечать за отображение экрана, передавая ему аргументы для отображения.Таким образом, представлению и модели не нужно ничего знать друг о друге, и будет только одна модель данных.

Если вам необходимо поддерживать согласованность обоих списков, значит что-то не так с вашим дизайном и, вероятно, представитбольше ошибок в коде.

См. здесь для деталей MVC.

2 голосов
/ 15 июля 2011

Я бы предложил вам использовать реализацию интерфейса ListModel (например, DefaultListModel ) для хранения ваших данных.Затем свяжите его со своим JList.Если средство визуализации по умолчанию не подходит, напишите свой собственный настроенный ListCellRenderer и примените к объекту JList.

2 голосов
/ 15 июля 2011

Java Swing использует разделяемую архитектуру модели , чтобы минимизировать связь между моделью (например, ListModel, Table Model) и соответствующим видом (JList, JTable). У вас нет , чтобы использовать больше памяти.

...