JPasswordField addFocusListener无法正常工作,不断重复消息

时间:2014-03-26 15:09:57

标签: java

我有一个带有2个JTextFields的登录表单 - 一个“elbtUser”,另一个“pass”(用户名和密码),一切正常。我想显示如下所示的消息,如果用户名留空并点击传递,否则按钮将启用。它可以工作,但消息在无限循环中不断重复。如何才能重新开始?

pass.addFocusListener(new FocusAdapter() {
    @Override
    public void focusGained(FocusEvent arg0) {
        if(elbtUser.getText().equals("")) {
            JOptionPane.showMessageDialog(null, "username cannot be empty");    
        }
        else {
            btnLogin.setEnabled(true);
        }
    }
});

1 个答案:

答案 0 :(得分:0)

我无法100%确定地说出来,但是我在对话框关闭后猜测文本字段重新获得焦点并触发动作监听器。如果是这种情况,请尝试以下两种方法之一:

1)添加变量以保持状态以及何时显示对话框。一旦获得焦点,然后在elbtUser获得焦点时重置它。

2)你可以在显示对话框后强制elbtUser请求焦点,elbtUser.requestFocus();

//编辑..我只是尝试(1),因为它看起来更容易并且有效,

        pass.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent arg0) {
            if(elbtUser.getText().equals("")) {

              //do this *BEFORE* displaying the dialog!!!
                elbtUser.requestFocus(false);

                JOptionPane.showMessageDialog(null, "username cannot be empty");

            }
            else {

            }
        }
    });