使用javaFX解析字符串输入

问题描述:

我目前正在开发一个项目,对Java很新,并且很难理解它与C#等语言相比的工作原理。使用javaFX解析字符串输入

我需要的是采取一个用户提交日期(字符串),并验证它是使用JavaFX的MM/DD/YYYY格式。

我一直在googling如何做一段时间,但没有发现我的解决方案似乎工作。

这里是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()); 
    }  

} 

不可能不管Java或其他开发环境的

,有没有办法做到这一点完美。一月一号还是二月二号是01/02/2014?不可能知道。您必须:

  • 请相信用户是正确的。也许提供诸如视觉日历或将日期拼写为文本的反馈。
  • 提供日期选取器工具,而不是依赖于输入的输入。

你可以看到他们键入的是而不是这种格式。尝试将字符串转换为日期数据类型。如果引发了不正确的格式异常,那么你知道用户错了。如果没有抛出异常,那么也许是用户说得对。

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

避免j.u.Date

与Java的早期版本开始,你会发现java.util.Date和java.util.Calendar中的类与类java.text.SimpleDateFormat一起。避免这些类。它们在设计和实现方面都出了名的麻烦,缺陷。

而是使用两种:

日期 - 只有

要验证你需要一个日期,只有一流的日期,没有任何时间的日或时区。 Joda-Time和java.time都为此提供了一个LocalDate类,而java.util.Date/Calendar则没有。

约达时间使用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的许多问题和解答中都有处理。所以搜索要做更多的学习。