使用javaFX解析日期输入

时间:2014-10-04 19:33:37

标签: java javafx

我目前正在开发一个项目,对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());
    }    

}

1 个答案:

答案 0 :(得分:0)

不可能

无论Java还是其他开发环境,都无法完美地完成此任务。 01/02/2014 1月1日还是2月2日?不可能知道。你要么:

  • 信任用户以使其正确。也许提供诸如视觉日历之类的反馈或将日期拼写为文本。
  • 提供日期选择工具,而不是依赖输入的输入。

您可以查看他们输入的内容是否为而不是。尝试将字符串转换为日期数据类型。如果抛出了不正确的格式异常,那么您就知道用户弄错了。如果没有抛出异常,那么可能是用户做对了。

我记得,JavaFX包含一个日期选择器小部件。我建议你考虑使用那个或其他第三方小部件。

避免使用j.u.Date

从早期版本的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课程,UTCISO 8601time zones

您的问题实际上是重复的,这些主题在StackOverflow上的许多问题和答案中处理。所以要寻求更多的学习。