我有这个库应用程序在其控制器类中有几个不同的方法。其中一个名为checkOut,用于结帐库项目。
我正试图在现在按下“结账”按钮时发生这种情况,并希望它能从我创建的txt字段中获取所有必要的信息。
我做了以下操作,当我在跑步时按“结帐”时,到处都是红色错误。感谢任何帮助,谢谢!
if (source == checkoutButton)
{
/*JDialog checkout = new JDialog(checkoutContent, "Checkout", true);
JPanel panel = new JPanel();
checkout.setBounds(750, 300, 350, 190);
checkout.setResizable(false);
checkout.add(panel);
checkout.setVisible(true);*/
String borrowerID = userIDTxtField.getText();
String code = itemIDField.getText();
String date = dateField.getText();
String copyString = code.substring(1);
int copy=Integer.valueOf(copyString);
if (ctrl.checkBorrower(borrowerID))
{
boolean valid = false;
SimpleDateFormat sdf1= new SimpleDateFormat("M/dd/yyyy");
sdf1.setLenient(false);
while (!valid)
{
try
{
sdf1.parse(date);
catalogArea.setText(ctrl.checkOut(borrowerID, code, copy, date));
valid = true;
}
catch (Exception e)
{
catalogArea.setText("Date is not valid. Please try again.");
continue;
}
}
}
else
{
catalogArea.setText("Sorry Invalid ID");
}
}
答案 0 :(得分:4)
while (!valid)
{
try
{
sdf1.parse(date);
catalogArea.setText(ctrl.checkOut(borrowerID, code, copy, date));
valid = true;
}
catch (Exception e)
{
catalogArea.setText("Date is not valid. Please try again.");
continue;
}
}
如果日期无效,此代码将导致无限循环。 GUI很可能被阻止(如果在EDT上发生这种情况 - 如果不在EDT上,则GUI更新不正确),因此将阻止用户更改导致循环的无效日期。
为了解决这个问题,我期待第一个更改代码未在循环中显示。基本上,dateField
(可能是JTextField
)应该是JSpinner
。
请参阅教程中的How to Use Spinners,了解该截屏,工作代码和其他提示。
如果文本字段是一个微调器,那么整个验证过程就变得多余了。微调器将提供有效(但不一定正确 - 需要用户智能API)的日期。