我正在使用Camick's code请求关注我的 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));
最佳答案
将 pwd.addAncestorListener(new RequestFocusListener());
移到 do {
之前,您只想添加一次,而不是每次循环时添加...
此外,在使用代码之前,您需要阅读并理解代码的用途。
默认情况下,当 ancestorAdded
事件发生时,RequestFocusListener
会自动删除,请尝试使用...
pwd.addAncestorListener(new RequestFocusListener(false));
...相反
关于java - 文本字段不保持焦点(AncestorListener),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575749/