2016-11-18 6 views
1

I've learned in this other question that it's possible by overriding the addNotify method, но это не работает. Вот мой код:Как запросить фокус на JPasswordField внутри JOptionPane?

private boolean accessPasswordFrame(String titleText, String labelText, String errorMessage, int accessType) { 
    JPasswordField passwordField = new JPasswordField() { 
     public void addNotify() { 
      super.addNotify(); 
      requestFocus(); 
     } 
    }; 
    final JComponent[] inputs = new JComponent[] { 
     new JLabel(labelText), 
     passwordField 
    }; 
    int result = JOptionPane.showConfirmDialog(frame, inputs, titleText, JOptionPane.OK_CANCEL_OPTION); 
    if (result == JOptionPane.OK_OPTION) { 
     String rootPass = new String(passwordField.getPassword()); 
     if (accessType == ADMIN_TYPE) { 
      if (rootPass.equals(ROOT_PASSWORD)) { 
       return true; 
      } else { 
       JOptionPane.showMessageDialog(null, 
         errorMessage, "Erro", 
         JOptionPane.ERROR_MESSAGE); 
      } 
     } else if (accessType == USER_TYPE) { 
      if (PasswordFrame.getPasswords() != null) { 
       for (Map.Entry<String, String> e : PasswordFrame.getPasswords().entrySet()) { 
        if (rootPass.equals(e.getValue())) { 
         lastUser = e.getKey(); 
         return true; 
        } else { 
         JOptionPane.showMessageDialog(null, 
           errorMessage, "Erro", 
           JOptionPane.ERROR_MESSAGE); 
        } 
       } 
      } else { 
       JOptionPane.showMessageDialog(null, 
         "Usuários cadastrados não existem.", "Erro", 
         JOptionPane.ERROR_MESSAGE); 
      } 
     } 
    } 
    return false; 
} 

После появления JOptionPane, фокус по умолчанию на кнопке «Ok»:

enter image description here

И если я просто requestFocus() перед показом диалога, он не работа.

+0

'но это не работает. '- так вы попробовали другие предложения в этой ссылке? – camickr

ответ

4

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

Отъезд RequestFocusListener класс найден в Dialog Focus для многоразового использования.

+0

Этот '.addAncestorListener (новый RequestFocusListener());' работал как шарм, спасибо вам большое! –

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