Swing - как работать с несколькими взаимозависимыми компонентами? - PullRequest
3 голосов
/ 12 апреля 2011

Это более общий вопрос: у меня довольно сложная таблица файлов на качелях (модель данных не тривиальна), и когда пользователь нажимает на запись, необходимо изменить два других компонента представления - представление статистики файлов,и просмотр содержимого файла - оба на одном экране.

Один из вариантов заключается в том, чтобы все определения классов этих компонентов были в одном файле, а затем иметь ссылки друг на друга - но это приведет к очень грязному коду.

Другой вариант, который я мог бы придумать, - это передать статистику и компоненты контента объекту таблицы и заставить его использовать его, но это сделает таблицу не пригодной для повторного использования где-либо еще.

Я уверен, что есть лучший способ сделать это - что бы вы порекомендовали сделать?

Вариант 1:

class MyPanel extends JPanel{

private MyTable table;
private MyFileViewer fv;
private MyFileStats stats;

class MyTable {
   addMouseListener({ ... fv.update(); stats.update(); })
}
class MyFileViewer{...}
class MyFileStats{...}
}

Варианты 2:

class MyTable {

   MyTable(MyFileViewer fv, MyFileStats stats) { ... 
       addMouseListener({fv.update, stats.update ... } 
   }    
}

1 Ответ

5 голосов
/ 12 апреля 2011

Вариант 3: шаблон Модель – Вид – Контроллер , как обсуждено здесь и этот контур . MVC зависит от схемы наблюдений .Вместо того, чтобы каждое представление обновляло другие, организуйте, чтобы каждое представление регистрировалось как слушатель вашей модели данных.Когда модель изменяется, каждый вид обновляется соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...