如何为此密码字段提供焦点?

n0p*_*0pe 5 java passwords swing joptionpane jpasswordfield

这可能看起来微不足道,但我无法弄清楚如何在此对话框焦点中给出密码框.

import javax.swing.JOptionPane;
import javax.swing.JPasswordField;

public class PasswordBox {
    @SuppressWarnings("unused")
    public String prompt() {
        JPasswordField pass = new JPasswordField(10);
        int action = JOptionPane.showConfirmDialog(null, pass,"Enter Password",JOptionPane.OK_CANCEL_OPTION); 
        return new String(pass.getPassword());
    }
}
Run Code Online (Sandbox Code Playgroud)

我从其他类调用它: String tmpPASS = new PasswordBox().prompt();

出于某种原因,当对话框出现时,"确定"按钮会获得焦点.

stacktrace(参见Eng.Fouad的回答):

at javax.swing.JComponent.addNotify(Unknown Source)
at PasswordBox$1.addNotify(PasswordBox.java:14)
at java.awt.Container.addNotify(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

cam*_*ckr 7

查看Dialog Focus中提供的解决方案.

编辑:

使用Eng Fouad建议的方法我相信代码应该是:

JPasswordField pass = new JPasswordField(10)         
{
    public void addNotify()             
    {                 
        super.addNotify();
        requestFocusInWindow();             
    }         
}; 
Run Code Online (Sandbox Code Playgroud)

EDIT2:

"Dialog Focus"博客条目中的链接包含一条注释,其中包含适用于Linux的建议.

  • 使用他在此答案顶部的Dialog Focus链接,这对我有用. (2认同)