0

我正在使用Camick 的代码请求关注我JPasswordField的(最后):

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

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

1 回答 1

4

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

此外,您需要在使用之前阅读并理解代码在做什么。

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

pwd.addAncestorListener(new RequestFocusListener(false));

...反而

于 2015-02-18T04:05:13.153 回答