这看似微不足道,但我无法弄清楚如何在此对话框焦点中提供密码框。

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());
    }
}

我从其他这样的类调用它: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)

最佳答案

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

编辑:

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

JPasswordField pass = new JPasswordField(10)
{
    public void addNotify()
    {
        super.addNotify();
        requestFocusInWindow();
    }
};

编辑2:

“Dialog Focus”博客条目中的链接带有注释,并带有在Linux上有效的建议。

09-05 19:20