KeyEvent

Ola pessoal do forum…
Aqui vou eu outra vez… :lol:
É o seguinte… Estou tentando montar um programa que converte numeros decimais em numeros binários…
Estava tantando fazer com que o primeiro caracter do meu JTextField nao fosse um ponto… E consegui com o KeyEvent :D… No entanto, quando eu digito alguns numeros e depois posiciono o cursor no começo do JTextField ele aceita o ponto e não o consome :(… Ou seja, o bloqueio só da certo quando o ponto é o primeiro caracter a ser digitado… Tentei programar no keyReleased, mas o consume() parece que nao funciona ali…
Vou mandar um pedaço do meu codigo…
Não sei se essa é a melhor maneira de se fazer isso, mas é que eu sou iniciante em java e tudo o que eu montei até agora foi com resultados que eu encontrei na internet… :?

TXT_DECIMAL.addKeyListener(new java.awt.event.KeyListener(){
			public void keyPressed(KeyEvent K) {
				if ((K.getKeyChar() != KeyEvent.VK_0)&&(K.getKeyChar() != KeyEvent.VK_1)&&(K.getKeyChar() != KeyEvent.VK_2)&&(K.getKeyChar() != KeyEvent.VK_3)&&(K.getKeyChar() != KeyEvent.VK_4)&&(K.getKeyChar() != KeyEvent.VK_5)&&(K.getKeyChar() != KeyEvent.VK_6)&&(K.getKeyChar() != KeyEvent.VK_7)&&(K.getKeyChar() != KeyEvent.VK_8)&&(K.getKeyChar() != KeyEvent.VK_9)&&(K.getKeyChar() != '.')&&(K.getKeyCode() != 8)){
					K.consume();
				}
				else{
					RECEBE_TXT_DECIMAL = TXT_DECIMAL.getText();
					CC = RECEBE_TXT_DECIMAL.length();
					if((RECEBE_TXT_DECIMAL.contains("."))){
						TP =  true;
						if((TP == true)&&(K.getKeyChar() == '.')){
							javax.swing.JOptionPane.showMessageDialog(null, "<HTML><FONT FACE = 'COMIC SANS MS'>O CAMPO SÓ PODE CONTER UM PONTO</FONT></HTML>","ERRO",javax.swing.JOptionPane.PLAIN_MESSAGE);
							K.consume();
						}
						// --- TESTE ---
					}
					else{
						TP = false;
						// --- TESTE ---
					}
					if(((RECEBE_TXT_DECIMAL.equals(""))&& (K.getKeyChar() == '.'))){
						CCP = true;
						if((CCP == true)&&(K.getKeyCode() != 8)){
							javax.swing.JOptionPane.showMessageDialog(null, "<HTML><FONT FACE = 'COMIC SANS MS'>O CAMPO DEVE COMEÇAR COM UM NÚMERO</FONT></HTML>","ERRO",javax.swing.JOptionPane.PLAIN_MESSAGE);
							K.consume();
						}
					}
					else{
						CCP = false;
					}
					if((CC > 8)&&(K.getKeyCode() != 8)){
						K.consume();						
					}
				}
			}
			public void keyReleased(KeyEvent K) {
				if((K.getKeyChar() == KeyEvent.VK_0)||(K.getKeyChar() == KeyEvent.VK_1)||(K.getKeyChar() == KeyEvent.VK_2)||(K.getKeyChar() == KeyEvent.VK_3)||(K.getKeyChar() == KeyEvent.VK_4)||(K.getKeyChar() == KeyEvent.VK_5)||(K.getKeyChar() == KeyEvent.VK_6)||(K.getKeyChar() == KeyEvent.VK_7)||(K.getKeyChar() == KeyEvent.VK_8)||(K.getKeyChar() == KeyEvent.VK_9)||(K.getKeyChar() == '.')||(K.getKeyChar() == KeyEvent.VK_BACK_SPACE)){
					RECEBE_TXT_DECIMAL = TXT_DECIMAL.getText();
					CC =  RECEBE_TXT_DECIMAL.length();
				}
			}
			public void keyTyped(KeyEvent K) {
				if ((K.getKeyChar() != KeyEvent.VK_0)&&(K.getKeyChar() != KeyEvent.VK_1)&&(K.getKeyChar() != KeyEvent.VK_2)&&(K.getKeyChar() != KeyEvent.VK_3)&&(K.getKeyChar() != KeyEvent.VK_4)&&(K.getKeyChar() != KeyEvent.VK_5)&&(K.getKeyChar() != KeyEvent.VK_6)&&(K.getKeyChar() != KeyEvent.VK_7)&&(K.getKeyChar() != KeyEvent.VK_8)&&(K.getKeyChar() != KeyEvent.VK_9)&&(K.getKeyChar() != '.')&&(K.getKeyCode() != 8)){
					K.consume();
				}
				else{
					RECEBE_TXT_DECIMAL = TXT_DECIMAL.getText();
					CC = RECEBE_TXT_DECIMAL.length();
					if((RECEBE_TXT_DECIMAL.contains("."))){
						TP =  true;
						if((TP == true)&&(K.getKeyChar() == '.')){
							//---> NAO EXIBE A MENSAGEM 'O CAMPO SÓ PODE CONTER UM PONTO' POIS ESTA MENSAGEM JÁ ESTÁ SENDO EXIBIDA NO EVENTO 'KEYPRESSED'
							K.consume();
						}
						// --- TESTE ---
					}
					else{
						TP = false;
						// --- TESTE ---
					}
					if(((RECEBE_TXT_DECIMAL.equals(""))&& (K.getKeyChar() == '.'))){
						CCP = true;
						if((CCP == true)&&(K.getKeyCode() != 8)){
							//---> NAO EXIBE A MENSAGEM 'O CAMPO DEVE COMEÇAR COM UM NÚMERO' POIS ESTA MENSAGEM JÁ ESTÁ SENDO EXIBIDA NO EVENTO 'KEYPRESSED'
							K.consume();
						}
					}
					else{
						CCP = false;
					}					
					if((CC > 8)&&(K.getKeyCode() != 8)){
						K.consume();						
					}
				}
			}});

Tentei colocar o seguinte codigo em keyPressed e em keyTyped:

if(RECEBE_TXT_DECIMAL.startsWith(".")){
K.consume();
}

Mas tambem nao deu certo… :frowning:

Alguem no forum poderia me ajudar a resolver esse “probleminha”???

P.S.: As variaveis estão com letras maiusculas… Já coloquei isso na “LISTA DE COISAS PARA ARRUMAR”… :wink:
Valew pessoal do forum… :smiley:

Você não deve tratar os eventos de teclas de um JTextField. Em vez disso, você deve associar um Document, como aparece no javadoc do JTextField.

http://java.sun.com/javase/6/docs/api/javax/swing/JTextField.html - veja o exemplo que cria um campo apenas com caracteres maiúsculos;