2013-02-21 2 views
-1

Я пытаюсь закрыть кадр, используя метод dispose(), в прослушивателе действий, но это не сработает.Закрытие JFrame после MVC

public class LoginController implements ActionListener, Observer { 

    private JTextField name; 
    private JTextField password; 
    private LoginPage login; 

/// // LoginFrame f1 = new LoginFrame(); 
    public LoginController(JTextField name, JTextField Password, LoginPage login) { 
     this.name = name; 
     this.password = Password; 
     this.login = login; 

    } 

    public void actionPerformed(ActionEvent e) { 
     login.LoginPage(); 
     login.checkLogin(name.getText(), password.getText()); 
     // dipose(); 
    } 
} 

Я попытался создать кадр, однако это идет в циклы.

+0

"не будут работать" не является точным. Дальше объясните проблему, с которой вы столкнулись. –

ответ

1

dispose, очевидно, не является методом вашего контроллера. Это не метод любого компонента, к которому ваш контроллер имеет прямой доступ.

Вопрос, который вам нужно задать себе, - это правильное поведение вашего контроллера, чтобы что-то закрывать.

У вас нет гарантии, что LoginPane действительно существует в контексте, который вы можете или должны утилизировать. Что делать, если LoginPane фактически является частью CardLayout, если вы произвольно распорядитесь родительским окном LoginPane, вы только что убили приложение ненадлежащим образом.

Это опасно и плохой дизайн предположить что-либо о других частях приложения таким образом/

Лучшего способа либо позволить LoginPane стрелять событие или иметь контроллер срабатывал событие, на успешном войдите в систему и позвольте некоторому другому контроллеру сделать выбор, как он должен реагировать на него.

Если вы прокляты на этом курсе, вы можете использовать SwingUtilities.getWindowAncestor(Component). Это вернет Window, что находится Component.

SwingUtilities.getWindowAncestor(login).dispose(); 

Я, лично, а также проверить на nullWindow

+0

Метод dipose() предназначен для JFrame. Я понимаю, что я хотел, чтобы actionListener удалял фрейм, используя метод dispose(), когда кнопка нажата, в классе контроллера. – user2097274

+0

Да, и какая часть этого ответа не смогла привести вас к этому. Просто потому, что я думаю, что это плохая идея и дизайн, не означает, что я не предоставил средств для достижения этого ... – MadProgrammer

+0

Извините, я ценю ваш ответ, извините за плохо сформулированный ответ. Спасибо – user2097274

Смежные вопросы