Как я могу справиться, когда я меняю экран - PullRequest
1 голос
/ 27 августа 2011

Я пытаюсь создать класс 2: класс LoginScreen и класс MainScreen

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

Потому что метод, который я использую, -

public void actionPerformed (ActionEvent e) { String cmd = e.getActionCommand ();

   if (OK.equals(cmd)) { //Process the password.
       char[] input = passwordField.getPassword();
       if (isPasswordCorrect(input)) {
           javax.swing.SwingUtilities.invokeLater(new Runnable() {
               public void run() {
                  JFrameExample.main(null);
               }
           });
       } else {
           JOptionPane.showMessageDialog(controllingFrame,
               "Invalid password. Try again.",
               "Error Message",
               JOptionPane.ERROR_MESSAGE);
       }

       //Zero out the possible password, for security.
       Arrays.fill(input, '0');

       passwordField.selectAll();
       resetFocus();
   } else { //The user has asked for help.
       JOptionPane.showMessageDialog(controllingFrame,
           "You can get the password by searching this example's\n"
         + "source code for the string \"correctPassword\".\n"
         + "Or look at the section How to Use Password Fields in\n"
         + "the components section of The Java Tutorial.");
   }

}

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

1 Ответ

3 голосов
/ 27 августа 2011

Полагаю, этот метод является методом вашего первого экрана, который должен быть JDialog или JFrame. Просто позвоните setVisible(false), чтобы скрыть фрейм (вы также можете позвонить dispose(), если диалог больше не будет использоваться).

Кроме того, вы не должны вызывать метод main в JFrameExample. Основной метод обычно используется для запуска нового приложения. Просто сделайте то, что делает метод main с вашего слушателя действия (вероятно, new JFrameExample().setVisible(true)).

Наконец, прослушиватель событий всегда вызывается в потоке диспетчеризации событий, поэтому нет смысла использовать SwingUtilities.invokeLater из прослушивателя событий.

Напомним, вот как должен выглядеть код:

if (isPasswordCorrect(input)) {
    setVisible(false); // or dispose();
    JFrame mainFrame = new JFrameExample();
    mainFrame.setVisible(true);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...