Попытка вызвать методы контроллера в режиме c определенно не является ответом, и я не рекомендую использовать синглтон, кроме случаев крайней необходимости (как рекомендовано другим ответом), поскольку использование синглтона может быть сложным в соответствии с переполнение стека Что такого плохого в синглтонах? Q / A.
Почему бы просто не дать MapView поле MapController и передать экземпляр через метод установки, который можно вызвать в MapController конструктор? Например:
public class MapView {
private MapController controller;
// ...
public MapView() {
//......
}
public void setMapController(MapController controller) {
this.controller = controller;
}
// then here you can call the instance methods as needed
}
и подключите его следующим образом:
public class MapController {
public class MapController {
private MapView view;
private MapModel model;
public MapController(MapView view, MapModel model) {
this.view = view;
this.model = model;
view.setMapController(this);
// .....
}
Поскольку в этом примере контроллер передается в представление через параметр установщика, а не параметр конструктора , нет никакой гарантии, что это соединение произойдет. и поэтому в представлении было бы разумно выполнить нулевой тест перед попыткой вызова методов контроллера, и, если будет обнаружен null, возможно, вызовет исключение, которое имеет смысл для вас и пользователя.
Итак, снова , это плохо: private static JButton jbOk;
Сделать все GUI компоненты экземпляром, а не stati c. Я также предпочитаю избегать использования одного ActionListener для всего GUI, так называемого прослушивателя "switch-board", так как это может излишне усложнять программу. Лучше использовать анонимных внутренних слушателей, которые вызывают методы контроллера.