0

所以我使用 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();
            }
        }
    });
4

4 回答 4

0
  • Don't use mouse listener. For doing on selection, use ItemListener:

    checkBox.addItemListener(new ItemListener() {
    
        @Override
        public void itemStateChanged(ItemEvent evt) {
            if(evt.getStateChange()==ItemEvent.SELECTED)
               jPasswordField1.setEchoChar((char)0);
           else jPasswordField1.setEchoChar('*');
        }
    });
    

Well, the above code works perfectly for me.

于 2013-11-05T19:38:00.690 回答
0

在与用户输入的密码字段不同的字段中向用户显示反馈。理想情况下,一个单独的只读组件位于 GUI 中密码的右侧。然后,您的密码强度反馈将由密码字段上的侦听器更新,但JPasswordField随后可以正常工作。

于 2013-11-05T19:20:31.553 回答
0

来自 JavaDoc:http ://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#requestFocus%28%29

公共无效请求焦点()

请求此组件获取输入焦点。有关此方法的完整说明,请参阅 Component.requestFocus()。

请注意,不鼓励使用此方法,因为它的行为取决于平台。相反,我们建议使用 requestFocusInWindow()。如果您想了解有关焦点的更多信息,请参阅 The Java Tutorial 中的 How to Use the Focus Subsystem 一节。

此外,正如 MadProgrammer 指出的那样 - 您的侦听器位于 JPasswordField 而不是 JCheckBox 上。

于 2013-11-05T19:36:43.283 回答
0

首先将a附加ActionListener到复选框,这意味着用户可以单击或按空格键来激活复选框

actionPerformed方法中,检查复选框的状态和所需的更改。

使用JPasswordField#selectAllJPassword#requestFocusInWindow(通常我会反过来;))。如果这些不起作用,您甚至可以考虑使用JPassword#repaint强制字段重新绘制

于 2013-11-05T19:27:42.057 回答