Manipular o BACKSPACE no JTextField

0 respostas
ThiagoHonorato

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
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();
        }
}
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.

Criado 10 de agosto de 2013
Respostas 0
Participantes 1