所以我使用JPasswordField获取用户输入,然后提供有关输入密码强度的即时反馈。我的问题是,如果用户单击“隐藏”复选框,文本字段中的字符串不会立即被“●”屏蔽,但仅在文本字段重新获得焦点时才起作用。我试过在mouseListener中使用component.getFocus,但它似乎不起作用。
这是特定听众的样子:
inputT.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent hideClicked){
if (hideC.isSelected()){
inputT.setEchoChar('•');
inputT.requestFocus();
}
if (!hideC.isSelected()){
inputT.setEchoChar('\u0000');
inputT.requestFocus();
}
}
});
答案 0 :(得分:0)
在与他们输入的密码字段不同的字段中向用户显示反馈。理想情况下,GUI中密码右侧的单独只读组件。密码字段上的监听器会更新您的密码强度反馈,但JPasswordField
可能正常工作。
答案 1 :(得分:0)
首先将ActionListener
附加到复选框,这意味着用户可以点击或按空格键激活复选框
在actionPerformed
方法中,检查复选框的状态和所需的更改。
使用JPasswordField#selectAll
或JPassword#requestFocusInWindow
(通常我反过来这样做;))。如果这些不起作用,您甚至可以考虑使用JPassword#repaint
强制字段重新绘制
答案 2 :(得分:0)
来自JavaDoc:http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#requestFocus%28%29
public void requestFocus()
请求此Component获取输入焦点。有关此方法的完整说明,请参阅Component.requestFocus()。
请注意,不鼓励使用此方法,因为其行为取决于平台。相反,我们建议使用requestFocusInWindow()。如果您想了解有关焦点的更多信息,请参阅“如何使用焦点子系统”,“Java教程”中的一节。
另外,正如MadProgrammer所指出的那样 - 你的监听器在JPasswordField而不是JCheckBox上。
答案 3 :(得分:0)
不要使用鼠标监听器。要进行选择,请使用ItemListener
:
checkBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent evt) {
if(evt.getStateChange()==ItemEvent.SELECTED)
jPasswordField1.setEchoChar((char)0);
else jPasswordField1.setEchoChar('*');
}
});
嗯,上面的代码对我来说很完美。