Textfield不保持焦点(AncestorListener)

时间:2015-02-18 04:01:44

标签: java swing user-interface jpasswordfield

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

第一次出现showConfirmDialog时焦点在密码字段上,但是第二次出现对话框时(由于密码错误或再次单击按钮),焦点将移至&# 39;确定',然后下次返回密码字段。这是我的代码......

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

1 个答案:

答案 0 :(得分:4)

pwd.addAncestorListener(new RequestFocusListener());之前移动do {,您只需要添加一次,而不是每次循环周期......

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

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

pwd.addAncestorListener(new RequestFocusListener(false));

...代替