Pessoal é o seguinte,
Estou implementando uma classe que adiciona uma máscara ao campo JTextField, que nesse caso é uma máscara específica para DATA, o que eu fiz foi que quando for pressionado a tecla BACKSPACE ao invés de apagar o número ele substitua com 0(zero). Exemplo: A data 10/08/2013 suponhamos que o cursor está no final do campo ao lado direito do número 3, quando o usuário pressionar a tecla BACKSPACE o número 3 é substituído pelo número 0 [10/08/2013, 10/08/2010, 10/08/2000, 10/08/2000, 10/08/0000, etc…] quando chegar ao fim, a data ficaria 00/00/0000.
Bom, mas isso eu já consegui realizar. Realizei a manipulação através de KeyListener com o método keyPressed.
Mas agora que vem o meu problema. Quero que quando todo o conteúdo do JTextField for selecionado e pressionado a tecla BACKSPACE o conteúdo seja apagado, deixando o campo vazio, só que a maneira que implementei pra manipular o BACKSPACE não deixa apagar o conteúdo.
Aqui está a maneira que fiz para manipular
[code]public void keyPressed(KeyEvent e) {// Ao pressionar BackSpace é substituído por 0 (zero)
if(e.getKeyCode() == KeyEvent.VK_BACK_SPACE){
try {
if(jTextField.getCaretPosition()==3 || jTextField.getCaretPosition()==6){ // índice 3 e 6 são as barras, quando chegar na barra o salta para o número seguinte
super.remove(jTextField.getCaretPosition()-2, 1); // Remove o número
super.insertString(jTextField.getCaretPosition()-1, "0", null); // Inseri 0(zero)
jTextField.setCaretPosition(jTextField.getCaretPosition()-2); // Movimenta o cursor para trás
}else{
if(jTextField.getCaretPosition()!=0){
super.remove(jTextField.getCaretPosition()-1, 1); // Remove o número
super.insertString(jTextField.getCaretPosition(), "0", null); // Inseri 0(zero)
jTextField.setCaretPosition(jTextField.getCaretPosition()-1); // Movimenta o cursor para trás
}
}
} catch (BadLocationException ex) {
Logger.getLogger(MaskFieldHB.class.getName()).log(Level.SEVERE, null, ex);
}
e.consume();
}
}[/code]
Eu pensei em descobrir se todo o conteúdo do JTextField está selecionado para limpar todo o campo, mas não encontrei nada que pudesse me ajudar.
Alguém tem uma solução?
Só um detalhe: A máscara só aparece no campo quando ele estiver vazio e for pressionado o primeiro número (que no caso será o dia). Se por exemplo for digitado o número 2 e o campo estiver vazio, ficará assim 20/00/0000 e conforme for sendo digitados os próximos números os zeros são substituídos.