文本字段不保持焦点(AncestorListener)

Textfield doesn't maintain focus (AncestorListener)

我正在使用 Camick's code 请求关注我的 JPasswordField(最后):

第一次出现 showConfirmDialog 时,焦点在密码字段上,但是当对话框第二次出现时(由于密码错误,或再次单击按钮),焦点移动到'OK',下次再回到密码域。这是我的代码...

int resp;
String orgPwd;
String givenPwd;
JPasswordField pwd = new JPasswordField(10);

do {
    pwd.setText("");
    pwd.addAncestorListener(new RequestFocusListener());
    diagResp = JOptionPane.showConfirmDialog(null, pwd, "Enter Password", JOptionPane.OK_CANCEL_OPTION);
    givenPwd = new String(pwd.getPassword());

    if (resp != JOptionPane.OK_OPTION) { return false; }
} while (!givenPwd.equals(orgPwd));

pwd.addAncestorListener(new RequestFocusListener());移到do {之前,你只想添加一次,而不是每次循环循环...

此外,在使用代码之前,您需要阅读并理解代码的作用。

默认情况下,RequestFocusListener 会在 ancestorAdded 事件发生时自动删除,请尝试使用...

pwd.addAncestorListener(new RequestFocusListener(false));

...改为