【发布时间】: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