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