I'm trying to validate the inclusion of dates in my system, referring to the batch of products, but I think I'm a bit hasty in the way I'm doing.
For what I need, I thought of 3 situations that I should control, which would be them:
The date of manufacture can not be later / greater than the expiration date;
The expiration date can not be earlier / shorter than the manufacturing date (it seems somewhat redundant if you look at the 1st validation);
The expiration date can not be less than the current date;
I made a simple simple and lean example, just to illustrate, and to point out errors in comparing dates.
public class ValidaData extends JFrame {
JLabel labelFab = new JLabel("Fabricação: ");
CampoData fabricacao = new CampoData();
JLabel labelVal = new JLabel("Validade: ");
CampoData validade = new CampoData();
JButton botao = new JButton("Calcular");
public ValidaData() {
setSize(500, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel painel = new JPanel();
painel.setLayout(new FlowLayout());
painel.add(labelFab);
painel.add(fabricacao);
painel.add(labelVal);
painel.add(validade);
painel.add(botao);
botao.setPreferredSize(new Dimension(90, 20));
botao();
add(painel);
}
private void botao() {
botao.addActionListener((ActionEvent e) -> {
valida();
});
}
Date dataAtual;
private boolean valida() {
if (fabricacao.getValor().compareTo(validade.getValor()) != 0) {
JOptionPane.showMessageDialog(null, "A data de fabricação, não pode ser posterior a data de validade!");
fabricacao.requestFocus();
return false;
}
else if (validade.getValor().compareTo(fabricacao.getValor()) != 0) {
JOptionPane.showMessageDialog(null, "A data de validade, não pode ser anterior a data de fabricação!");
validade.requestFocus();
return false;
}
else if (validade.getValor().compareTo(dataAtual = new Date()) != 0) {
JOptionPane.showMessageDialog(null, "A data de validade esta vencida !");
validade.requestFocus();
return false;
} else {
JOptionPane.showMessageDialog(null, "Deu certo !!");
return true;
}
}
public static void main(String[] args) {
EventQueue.invokeLater(()
-> {
ValidaData e = new ValidaData();
e.setVisible(true);
});
}
}
class CampoData extends JFormattedTextField {
private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
public CampoData() {
setColumns(6);
try {
MaskFormatter mf = new MaskFormatter("##/##/####");
mf.install(this);
} catch (Exception e) {
e.printStackTrace();
}
}
public void setValor(Object valor) {
setText(sdf.format((Date) valor));
}
public Date getValor() {
try {
SimpleDateFormat sdft = new SimpleDateFormat("dd/MM/yyyy");
return sdft.parse(getText());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Não foi possível obter a data!");
e.printStackTrace();
return null;
}
}
}