如何检查 jFormattedTextField 是否为空?

How to check if a jFormattedTextField is empty?

我看到了一些关于这个的类似问题,但是,none 似乎对我有帮助。

我有一个带有此掩码“##-##-####”的 jFormattedTextField,我使用 dd-MM-yyyy 获取要发送到 PostgreSQL 的日期,此字段用于出生日期。

当我使用普通的 jTextfield 并且用户必须输入“/”或“-”来分隔日、月和年时,可以检查它是否为空,但是,打开掩码,我我无法检查。

else if (jFormattedTextFieldDATA.getText().equals(""))
                {
                    JOptionPane.showMessageDialog(null,"Por favor completar o campo Data"); //please complete date field

            try {
                conecta.conn.setAutoCommit(false);
                conecta.conn.rollback();
            } catch (SQLException ex) {
                Logger.getLogger(Pessoa.class.getName()).log(Level.SEVERE, null, ex);
            }

而且,这里是 netbeans 说错误的地方:

SimpleDateFormat formatter  = new SimpleDateFormat ("dd-MM-yyyy");
        java.util.Date utilDate = null;
                try {
                    utilDate = formatter.parse(jFormattedTextFieldDATA.getText());
                } catch (ParseException ex) {
                   Logger.getLogger(Pessoa.class.getName()).log(Level.SEVERE, null, ex);
                }
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
        pst.setDate(5, sqlDate);
        pst.executeUpdate(); //executa o SQL

这是从 netbeans 得到的:

java.lang.NullPointerException: 无法调用“java.util.Date.getTime()”,因为“utilDate”为空

JFormattedTextField 应该已经配置了 SimpleDateFormatter,它将执行文本的 parsing/formatting/validation。

在这种情况下,您应该使用 getValue 而不是 getText

java.util.Date utilDate = jFormattedTextFieldDATA.getValue();
if (utilDate != null) {
    java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
    pst.setDate(5, sqlDate);
} else {
    // I don't know what you want to do in this case...
}
pst.executeUpdate(); //executa o SQL