Как избежать связывания представления и контроллера в Swing

Недавно я столкнулся с проблемой при попытке реализовать Model-View-Controller в Swing.

У меня есть класс графического интерфейса, который состоит из подпанелей, а эти подпанели состоят из других подпанелей. Теперь в одной из этих под-подпанелей есть JButton. В ActionListener для этого JButton я хочу вызвать метод в контроллере. Чтобы сделать это, мне нужно было бы передать контроллер глубоко в недра GUI на под-под-панель, где находится JButton. Затем в этой под-подпанели мне нужно будет присоединить ActionListener к JButton и заполнить actionPerformed(), вызвав метод, который я хотел вызвать в контроллере.

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

Моей единственной мыслью было сделать контроллер Singleton, чтобы отделить его от представления, но я слышал, что Singleton обычно злые.

Любые советы по этому вопросу будут высоко оценены.


person Andrew    schedule 21.04.2012    source источник
comment
ِТакже поможет stackoverflow.com/questions/10285582   -  person Yousha Aleayoub    schedule 16.01.2019


Ответы (1)


Вместо того, чтобы передавать ссылку на контроллер, пусть контроллер прослушивает представление, как это предлагается косвенной ассоциацией, изображенной здесь. Для этого идеально подходит добавление PropertyChangeListener, как показано здесь. Когда представлению необходимо обратиться к контроллеру, оно просто вызывает firePropertyChange().

Более целесообразным подходом является предоставление контроллеру отдельного представления для определенных операций, таких как метод reset(), показанный здесь.

person trashgod    schedule 21.04.2012