我目前正在开发一个项目,对Java很新,与C#等语言相比,我很难理解它的工作原理。
我需要的是获取用户提交的日期(字符串)并使用JavaFX验证它是MM / DD / YYYY格式。
我一直在谷歌搜索如何做这个,但我找到的解决方案似乎都没有。
以下是GUI: http://puu.sh/bZcmg/8a33901e28.png
这是我的控制器(到目前为止):
public class FXMLNewLabSchedulerDocController implements Initializable {
@FXML
private TextField txtRequestorName;
@FXML
private TextField txtRequestorEmail;
@FXML
private TextField txtEventTitle;
@FXML
private TextField txtNumParticipants;
@FXML
private TextField txtEventDate;
@FXML
private TextField txtStartTime;
@FXML
private TextField txtEndTime;
@FXML
private ToggleButton togStartTime;
@FXML
private ToggleButton togEndTime;
@FXML
private CheckBox chkPrinter;
@FXML
private RadioButton rbYes;
@FXML
private RadioButton rbNo;
@FXML
private TextArea txtareaMessage;
@FXML
private void handleBtnSubmit(ActionEvent event) {
System.out.println("You clicked me!");
}
@FXML
private void handleBtnClear(ActionEvent e) {
System.out.println("Clear All Fields!");
txtRequestorName.setText("");
txtRequestorEmail.setText("");
txtEventTitle.setText("");
txtNumParticipants.setText("");
txtEventDate.setText("");
txtStartTime.setText("");
txtEndTime.setText("");
chkPrinter.setSelected(false);
rbYes.setSelected(false);
rbNo.setSelected(false);
txtareaMessage.setText("");
}
@FXML
private void handleBtnClose(ActionEvent event) {
System.out.println("Application Close!");
Platform.exit();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
txtareaMessage.editableProperty().bind(rbYes.selectedProperty());
}
}
答案 0 :(得分:0)
无论Java还是其他开发环境,都无法完美地完成此任务。 01/02/2014
1月1日还是2月2日?不可能知道。你要么:
您可以查看他们输入的内容是否为而不是。尝试将字符串转换为日期数据类型。如果抛出了不正确的格式异常,那么您就知道用户弄错了。如果没有抛出异常,那么可能是用户做对了。
我记得,JavaFX包含一个日期选择器小部件。我建议你考虑使用那个或其他第三方小部件。
从早期版本的Java开始,您将找到java.util.Date和java.util.Calendar类以及java.text.SimpleDateFormat。避免这些课程。众所周知,它们在设计和实施方面都很麻烦。
而是使用:
验证日期,您需要一个仅限日期的课程,没有任何时间或时区。 Joda-Time和java.time都为此提供了一个LocalDate
类,而java.util.Date/Calendar则没有。{/ p>
使用Joda-Time 2.4。
的示例代码String input = "01/02/2014";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "M/d/yyyy" ); // Single `M` and `d` allows user to enter single or double digits.
LocalDate localDate = null;
try {
localDate = formatter.parseLocalDate( input );
} catch ( IllegalArgumentException e ) {
// FIXME: Handle the user input in wrong format.
}
生成文本作为对用户的反馈。
DateTimeFormatter formatterOutput = DateTimeFormat.forStyle( "F-" ).withLocale( Locale.US );
String output = formatterOutput.print( localDate );
转储到控制台。
System.out.println( "input: " + input );
System.out.println( "localDate: " + localDate );
System.out.println( "output: " + output );
跑步时。
input: 01/02/2014
localDate: 2014-01-02
output: Thursday, January 2, 2014
额外提示:了解DateTime
课程,Interval
课程,UTC,ISO 8601和time zones。
您的问题实际上是重复的,这些主题在StackOverflow上的许多问题和答案中处理。所以要寻求更多的学习。