Swing:文本框焦点丢失事件vs按钮单击事件

时间:2015-11-30 09:28:06

标签: java swing events button listeners

我有一个带有各种文本框的表单(比如大约10个)。用户填写每个文本框中的值后,会在文本框的focuslost事件中进行验证。

public void focusLost(FocusEvent e)
    {

        JTextField tf = (JTextField)(e.getSource());
        String finalVal = tf.getText();
        try
        {
            validate(finalVal);
        }
        catch(NmfException ex)
        { 
            JOptionPane.showMessageDialog(parent, message, title,
                                    JOptionPane.ERROR_MESSAGE);//Error Message is passed
/* Error pop up is displayed when validation fails. Message text with an 'Ok' button is displayed and the code waits for ok to be clicked to execute rest of the code*/
            tf.setText(defaultVal);//Value is reset to default value
            return;
        }

    }

表单中有一个'添加'从UI(从文本框)获取值并将其发送到服务器的按钮。理想情况下,由于在每个文本字段验证值,发送到服务器的值应该是有效输入。

但我的问题是,当给文本字段输入无效时(例如-5表示无效输入)并且'添加'按钮立即被点击。   触发focusLost事件并获得弹出窗口,同时代码等待' OK'弹出按钮,按下按钮的下一个事件也被调用。因此,在 defaultVal 可以设置为文本字段值之前,添加按钮操作已完成(添加后没有进一步验证)操作)和无效输入被发送到服务器。

如何确保仅在完成focusLost事件操作后才调用Add操作。请为此问题建议修复?对于这种情况,最佳做法是什么?

2 个答案:

答案 0 :(得分:0)

设置一个标记,点击“添加”时应检查。

  

因此,如果所有验证都应该为真/确定,则发送到服务器。

     

如果flag为false / invalid,则单击“Add”然后提供用户提示   有错误信息。

     

根据您的情况,如果有人尝试添加无效值,那么   focusLost事件使Flag - >是的,反之亦然。

同样需要设计编码架构。

答案 1 :(得分:0)

您还可以在文本字段上使用鼠标侦听器,并在mouseExited方法中进行验证