在JOptionPane JPasswordField中设置焦点

时间:2014-02-12 16:43:38

标签: java swing joptionpane

我使用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);

1 个答案:

答案 0 :(得分:1)

您必须创建JOPtionPane的实例并使用setWantsInput(boolean)方法。它并不方便,但您使用的构建器方法实际上只适用于基本情况。然后,您需要在对话框中添加ComponentListener以请求选择您的密码字段。您可以在JOptionPane javadoc上找到更多类似的文档。

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