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…
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”…
Valew pessoal do forum…