Java 中的日期验证失败

Date Validation in Java fails

我是 Java 编程的新手,我正在尝试创建一个 Java FX 项目。我遵循了有关日期验证方法的教程,但似乎 fail.In 这特定部分我必须制作一个列表,其中包含用户在文本字段中插入的对象。这包括日期,但必须有效。

在这段代码下面,我需要验证的对象是 datep 。我创建了一个方法,如果字符串有效,它应该将我的标志设置为 true 并 return 它。在创建列表之前,我插入了一个 if 语句来检查我的 flag 是否设置为 true,这意味着日期是根据format.When 我 运行 它创建列表,即使日期是 invalid.Am 我把 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);
            
}

从你在这里试图实现的目标来看,我建议修改代码。

首先让我向您解释一下我发现的两个问题:第一个是您缺少对日期验证方法的调用,即您收到时对CheckDate(datep)的调用文本输入并存储标志变量,或者看起来我们没有完整的代码(没关系);其次,您在 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 编程的新手:

  1. 对于所有方法,第一个字母应始终为小写字母,如 public boolean checkDate() 这样你就可以将方法与 Class 区分开来,后者始终以大写字母开头,如 public class Product。唯一的例外是 class.
  2. 的构造函数
  3. 切勿将 graphical interface 逻辑与 logical processing 逻辑混用。这是:您应该将处理部分放在一个包中,将图形组件放在另一个包中,并通过在 graphical interface.
  4. 中创建 processing logic 的实例来关联它们
  5. 用户输入验证应直接在处理程序方法中使用 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();
        }
    }
}

瞧瞧一个更干净的版本