Java 在JOptionPane JPasswordField中设置焦点

Java 在JOptionPane JPasswordField中设置焦点,java,swing,joptionpane,Java,Swing,Joptionpane,我使用JOptionPane创建了一个密码字段。当我运行程序时,会出现JOptionPane,看起来很棒,但是焦点总是转到OK按钮。我希望焦点从密码字段开始。我尝试了requestFocus(),requestFocusInWindow(),但这似乎不起作用。有什么特别的东西,我需要去获得密码字段的重点 请参见下面的我的代码: JPasswordField pf = new JPasswordField(); pf.requestFocusInWindow(); int okCxl = JOpt

我使用
JOptionPane
创建了一个密码字段。当我运行程序时,会出现
JOptionPane
,看起来很棒,但是焦点总是转到OK按钮。我希望焦点从密码字段开始。我尝试了
requestFocus()
requestFocusInWindow()
,但这似乎不起作用。有什么特别的东西,我需要去获得密码字段的重点

请参见下面的我的代码:

JPasswordField pf = new JPasswordField();
pf.requestFocusInWindow();
int okCxl = JOptionPane.showConfirmDialog(null, pf, "ENTER SUPERUSER PASSWORD", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);

您必须创建的实例并使用该方法。虽然没有那么方便,但您使用的生成器方法实际上只是用于基本情况。然后,您需要在对话框中添加一个,以请求选择密码字段。你可以在网上找到更多类似的文档

可能重复的
    final JPasswordField pf = new JPasswordField();
    //Create OptionPane & Dialog
    JOptionPane pane = new JOptionPane(pf, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
    JDialog dialog = pane.createDialog("ENTER SUPERUSER PASSWORD");
    //Add a listener to the dialog to request focus of Password Field
    dialog.addComponentListener(new ComponentListener(){

        @Override
        public void componentShown(ComponentEvent e) {
            pf.requestFocusInWindow();
        }
        @Override public void componentHidden(ComponentEvent e) {}
        @Override public void componentResized(ComponentEvent e) {}
        @Override public void componentMoved(ComponentEvent e) {}
        });

    dialog.setVisible(true);