【问题标题】:Swing: text box focus lost event vs button clicked eventSwing:文本框焦点丢失事件与按钮单击事件
【发布时间】:2016-03-03 21:22:02
【问题描述】:

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

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事件并获取popup,同时代码在等待popup中的'OK'按钮被按下的同时,也会调用按钮点击的next事件。所以在defaultVal之前可以设置为文本字段值,添加按钮操作完成(添加操作中没有进一步验证)并将无效输入发送到服务器。

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

【问题讨论】:

  • 您可能想看看Validating Input。禁用添加按钮,直到您可以验证所有字段。您也可以使用DocumentListener

标签: java swing events button listeners


【解决方案1】:

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

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

如果标志为假/无效,同时点击“添加”,然后给用户提示 带有错误消息。

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

同样需要设计编码架构。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-07-19
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多