当用户点击复选框时,Textfield失去焦点(Java Swing)

时间:2013-11-05 19:16:34

标签: java swing textfield

所以我使用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 个答案:

答案 0 :(得分:0)

在与他们输入的密码字段不同的字段中向用户显示反馈。理想情况下,GUI中密码右侧的单独只读组件。密码字段上的监听器会更新您的密码强度反馈,但JPasswordField可能正常工作。

答案 1 :(得分:0)

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

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

使用JPasswordField#selectAllJPassword#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('*');
        }
    });
    

嗯,上面的代码对我来说很完美。