我正在使用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));
答案 0 :(得分:4)
在pwd.addAncestorListener(new RequestFocusListener());
之前移动do {
,您只需要添加一次,而不是每次循环周期......
此外,在使用代码之前,您需要阅读并理解代码的作用。
默认情况下,RequestFocusListener
事件发生时会自动删除ancestorAdded
,请尝试使用...
pwd.addAncestorListener(new RequestFocusListener(false));
...代替