java - Java 中的日期验证失败
问题描述
我对 Java 编程完全陌生,我正在尝试创建一个 Java FX 项目。我遵循了有关日期验证方法的教程,但它似乎失败了。在这一部分中,我必须制作一个列表,其中包含用户在文本字段中插入的对象。这包括一个日期,但它必须是有效的。
在这段代码下面,我需要验证的对象是datep。我创建了一个方法,如果字符串有效,它应该将我的标志设置为 true 并返回它。在创建列表之前,我插入了一个if语句来检查我的标志是否设置为 true,这意味着根据格式验证日期。当我运行它时,即使日期无效,它也会创建列表。我我将 if 语句放在错误的部分?因为我认为方法很好。
@Override
public void handle(MouseEvent event) {
if (event.getSource() == NewrentBtn) {
String vehiclen =OximaTxT.getText();
String clientn = ClientTxT.getText();
String store = StoreTxT.getText();
String storer = StorerTxT.getText();
String timerp = TimeTxT.getText();
String timer = TimerTxT.getText();
String datep = DateTxT.getText(); // <-------------
String dater = DaterTxT.getText();
Integer sum = Integer.parseInt(SumTxT.getText());
if(flag = true) { // <------------
createRental(id, vehiclen, store, datep, timerp, clientn, storer, dater, timer, sum);
clearTextFields();
}
}
public boolean Checkdate(String datep) { // <-------------
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date BOD = null;
df.setLenient(false);
try
{
BOD = df.parse(datep); // <----------------
flag = true;
}
catch(Exception e)
{
flag = false;
}
return flag;
}
public void createRental(int id,String vehiclen,String store,String datep,String timerp,String clientn,String storer,String dater,String timer,int sum ) {
Rental m = new Rental(id,vehiclen,store,datep,timerp,clientn,storer,dater,timer,sum);
RentalList.add(m);
rentalTableView.getItems().add(m);
}
解决方案
从您在这里尝试实现的外观来看,我建议修改代码。
首先让我向您解释我发现的两个问题:第一个是您缺少对 Date 的验证方法的调用,即CheckDate(datep)
当您收到文本输入并存储 flag 变量时的调用,或者所以看起来我们没有完整的代码(没关系);其次,您在 中缺少 a =
,if(flag = true)
应该是if(flag == true)
所以这里是完整的代码:
@Override
public void handle(MouseEvent event) {
if (event.getSource() == NewrentBtn) {
String vehiclen =OximaTxT.getText();
String clientn = ClientTxT.getText();
String store = StoreTxT.getText();
String storer = StorerTxT.getText();
String timerp = TimeTxT.getText();
String timer = TimerTxT.getText();
String dater = DaterTxT.getText();
Integer sum = Integer.parseInt(SumTxT.getText());
String datep = DateTxT.getText();
boolean flag = Checkdate(datep);
if(flag == true) {
createRental(id,vehiclen,store,datep,timerp,clientn,storer,dater,timer,sum);
clearTextFields();
}
}
}
这样,您就可以验证日期格式是否正确,如果符合您的方案,则继续该过程。
最后,我有三个建议,因为您是 Java 编程新手:
- 对于所有方法,第一个字母应始终为小写,
public boolean checkDate()
这样您可以将方法与类区分开来,类始终以大写开头,如public class Product
. 唯一的例外是类的构造函数。 - 您永远不应该将
graphical interface
逻辑与logical processing
逻辑混为一谈。这是:您应该将处理部分保存在一个包中,将图形组件保存在另一个包中,并通过processing logic
在graphical interface
. - 用户输入验证应直接在处理程序方法中使用 try-catch 子句进行,如下所示。
这里:
public void handle(MouseEvent event) {
if (event.getSource() == NewrentBtn) {
String vehiclen =OximaTxT.getText();
String clientn = ClientTxT.getText();
String store = StoreTxT.getText();
String storer = StorerTxT.getText();
String timerp = TimeTxT.getText();
String timer = TimerTxT.getText();
String dater = DaterTxT.getText();
Integer sum = Integer.parseInt(SumTxT.getText());
try {
String datep = DateTxT.getText();
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
df.parse(date);
createRental(id,vehiclen,store,datep,timerp,clientn,storer,dater,timer,sum);
clearTextFields();
} catch (ParseException e) {
/* Here you handle what happens when if fails, you can create a JDialog to show
the error or create an alert, whatever you need */
e.printStackTrace();
}
}
}
瞧,一个更清洁的版本
推荐阅读
- php - 提交后一维数组变为多维
- bash - 有没有办法限制 getopts 只能在单个选项上工作?
- java - 在 JAX-RS Rest API 中上传大数据文件
- python - 在 Azure Kubernetes 服务中部署时导入 cv2 错误 - python
- c# - 如何让 ControllerContext 在带有 Hangfire 的 BackgroundJob 中使用 Rotativa 构建 PDF
- java - 在 Spring Cloud Stream 中使用 PollableMessageSource 输入时如何使用 avro 本机解码器?
- jquery - JQuery在引导选项卡中隐藏最后一个下一个按钮
- computer-vision - 2d 人体姿态估计评估指标
- javascript - 我正在尝试显示数据库表中的一组值。我得到了这些值但无法显示它
- javascript - state 不等于 false 时的阻塞函数