Help em metodo com expressao regular

Boa noite, tenho o seguinte metodo:

       /**
	* Objetivo: Remover caracteres não numéricos 
	* Data: 07/08/2006
	* @param entrada String
	* @return String
	*/
	public String removeCaracters(String entrada){
	     Pattern numericos = Pattern.compile("[0-9]",Pattern.CASE_INSENSITIVE);
	     Matcher encaixe = numericos.matcher(entrada);
	     StringBuffer saida = new StringBuffer();
	     while(encaixe.find())
	        saida.append(encaixe.group());
	     return saida.toString();
	}

Ele esta funcionado, mas preciso que ele aceite que o campo possa ser editado com as setas direita e esquerda do teclado, so tah permitindo o backspace, consigo adpatar?

Estou chamando assim na minha classe view:

txtTelefone.addKeyListener(
         		new KeyListener(){
         			Validacoes validacoes = new Validacoes();
 
 					public void keyTyped(KeyEvent e) {
 						txtTelefone.setText(validacoes.maxLength(txtTelefone.getText(),15));
 					}
 
 					public void keyPressed(KeyEvent e) {
 						txtTelefone.setText(validacoes.maxLength(txtTelefone.getText(),15));
 					}
 
 					public void keyReleased(KeyEvent e) {
 						txtTelefone.setText(validacoes.maxLength(txtTelefone.getText(),15));
 					}
         			
         		}
);

Sendo chamado dentro do maxlength:

public String maxLength(String entrada,int tamanho){
 		StringBuffer saida = new StringBuffer();
 		char[] caracteres = removeCaracters(entrada).toCharArray();
 		for(int i=0;i<caracteres.length && i<=tamanho;i++){
 			saida.append(caracteres[i]);
 		}
 		return saida.toString();
}

Alguma sugestao?

Alguém sabe me dizer por que desabilita a tecla com a setas da direita e esquerda do teclado?, não permitindo editar um JTextfield, consigo com backspace.

Olha só, eu não curto muito mexer com KeyListeners… Sempre tem problemas com as outras teclas quando utilizamos eles em conjunto com campos de texto… Dê uma olhada neste tópico:
http://www.guj.com.br/posts/list/35410.java#188223
Talvez um DocumentListener seja mais adequado…

Valeu, cara pela força, não preciso mudar nada em meus métodos e como ficaria essa parte:

txtTelefone.addKeyListener(
         		new KeyListener(){
         			Validacoes validacoes = new Validacoes();
         			ManipulaProperties prop = new ManipulaProperties();
         			//contem o tamanho do campo para telefone no properties
         			int maxLength = Integer.parseInt(prop.carregarConfiguracoes().getProperty("makLengthTelefone"));
 					public void keyTyped(KeyEvent e) {
 						txtTelefone.setText(validacoes.maxLength(txtTelefone.getText(),maxLength-1));
 					}
 
 					public void keyPressed(KeyEvent e) {
 						txtTelefone.setText(validacoes.maxLength(txtTelefone.getText(),maxLength-1));
 					}
 
 					public void keyReleased(KeyEvent e) {
 						txtTelefone.setText(validacoes.maxLength(txtTelefone.getText(),maxLength-1));
 					}
         			
         		}
);

EDITADO!!!

txtTelefone.addKeyListener(
         		new KeyListener(){
         			Validacoes validacoes = new Validacoes();
         			ManipulaProperties prop = new ManipulaProperties();
         			//contem o tamanho do campo para telefone no properties
         			int maxLength = Integer.parseInt(prop.carregarConfiguracoes().getProperty("makLengthTelefone"));
 					public void keyTyped(KeyEvent e) {
 					}
 
 					public void keyPressed(KeyEvent e) {
						if(e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_RIGHT)
							return;
						txtTelefone.setText(validacoes.maxLength(txtTelefone.getText(),maxLength-1));
 					}
 
 					public void keyReleased(KeyEvent e) {
 					}
         			
         		}
);

Veja o que acontece assim, por favor

Funciona parcialmente, se eu digito uma letra no começo e continuo digitando ele apaga, mas se deixar no final ele mantém.

Tenta esse tópico aqui:
http://www.guj.com.br/posts/list/30885.java#165774

Consegui com alguns pequenos ajustes:

public class MyVerifier extends InputVerifier {
		private boolean allowLostOfFocus = false;
		private StringBuffer errorCauses = null;
		JTextField txt = null;
		int maxLength = 0;

		public boolean verify(JComponent input) {
			errorCauses = new StringBuffer("");
			
			if(!(input instanceof JTextField)) {
				errorCauses.append(
					"Um objeto MyVerifier só deve ser " +
					"associado a componentes do tipo JTextField"
				);
				return false;
			}
			
			txt = (JTextField)input;
			ManipulaProperties prop = new ManipulaProperties();
			maxLength = Integer.parseInt(prop.carregarConfiguracoes().getProperty("makLengthTelefone"));
			maxLength = maxLength -1;
			if(txt.getText().length() > maxLength ) {
				
				errorCauses.append("O campo deve ter no máximo." + maxLength + " digitos");
			}
			
			try {
				if(txt.getText()!=null)
				Long.parseLong(txt.getText());
			}catch(NumberFormatException e) {
				errorCauses.append(errorCauses.length() == 0 ? "- " : "\n- ");
				errorCauses.append("O campo deve ter apenas números.");
			}
			
			return errorCauses.length() == 0;
		}

		/* 
		 * Método sobrescrito de InputVerifier
		 */
		public boolean shouldYieldFocus(JComponent input) {
			if(allowLostOfFocus)
				return true;
			if(verify(input))
				return true;
			
			/*
			 *  Trate aqui a entrada inválida da forma que lhe for mais 
			 * conveniente
			 */
			Validacoes validacoes = new Validacoes(); 
			txt.setText(validacoes.maxLength(txt.getText(),maxLength));
			
			allowLostOfFocus = true;
			JOptionPane.showMessageDialog(
				input.getParent(),
				errorCauses,
				"Erro",
				JOptionPane.ERROR_MESSAGE);
			allowLostOfFocus = false;
			return false;
		}
}

Valeu mantu!