Boa tarde Davi.Jv.
Como disse antes, apenas fiz de improviso e na hora, porém existem também a questão de se limitar a quantidade caracteres para 10 e também a validação das datas.
Assim sendo, quanto a questão de se limitar a quantidade de caracteres no JTextField, necessário é que voce crie a seguinte classe:
import javax.swing.text.*;
public class FixedLengthDocument extends PlainDocument {
private int iMaxLength;
public FixedLengthDocument(int maxlen) {
super();
iMaxLength = maxlen;
}
@Override
public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {
if (str == null) {
return;
}
if (iMaxLength <= 0) // aceitara qualquer no. de caracteres
{
super.insertString(offset, str, attr);
return;
}
int ilen = (getLength() + str.length());
if (ilen <= iMaxLength) // se o comprimento final for menor...
super.insertString(offset, str, attr); // ...aceita str
}
}
Após criar essa classe, configure o seu JTextField assim:
txtdata = new JTextField();
txtdata.setDocument(new FixedLengthDocument(10));
Agora vamos a questão da validação das datas, criando o seguinte método booleano dentro da própria classe onde está o JTextField:
public Boolean validaData(String datatemp){
Boolean ret;
String data = datatemp.replace("/","");
int dia = Integer.parseInt(data.trim().substring(0,2));
int mes = Integer.parseInt(data.trim().substring(2,4));
int ano = Integer.parseInt(data.trim().substring(4,8));
int ultimoDiaMes[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
if (ano < 1900){
ret = false;
} else if (mes < 0 || mes > 12) {
ret = false;
// Ano Bisexto
} else if (mes == 2 && ultimoDiaMes[mes] == 29 && (ano % 400 > 0 && (ano % 4 > 0 && ano % 100 == 0))){
ret = false;
} else if (dia < 0 && dia > ultimoDiaMes[mes]){
ret = false;
} else {
ret = true;
}
if (ret == false) JOptionPane.showMessageDialog(null, "Data inválida");
return ret;
}
Agora dentro do evento KeyListener, vamos eliminar as barras duplas, assim:
txtdata = new JTextField();
txtdata.setDocument(new FixedLengthDocument(10));
txtdata.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e){
JTextField text = (JTextField)e.getSource();
if (text.getText().length() == 2 || text.getText().length() == 5){
if (e.getKeyChar() == '/') {
text.getText().replaceAll("//", "/");
} else {
text.setText(text.getText() + "/");
}
} else if (text.getText().length() == 10){
if (!validaData(text.getText())) text.setText("");
}
}
});