PessoALL, eu já perguntei sobre este assunto mas não ficou claro, é o seguinte, imagine que eu tenho 3 JTextField em um formulario, todos eu preciso validar a entrada, mostrando uma mensagem quando houver erro e que foco ficasse no proprio JTextField, não passe para o campo seguinte enquanto a validação fosse verdadeira.
Ou talvez não seja assim que voces fazem em java, como seria?
desde já agradeco
Marcos
:? Bom, deixa eu ver se entendi. Vc quer fazer a validação de alguma data?
Se não for, não tem problema. Seria interessante vc fazer a validação depois que os dados já estiverem nos JTextFields. Por exemplo: se fosse uma data, pode acontecer o caso de quando eu digito 29 para fevereiro, mas não digito o mes nem o ano, ele pode acabar aceitando um 29 de fevereiro em um ano que não é bissexto. E vice-versa. Por isso, no caso das datas, é legal fazer a validação delas depois que o usuário digita em todos os campos.
Porém, se esse não for o caso, vc pode consultar na documentação Java sobre tratamento de eventos de teclado keyPressed ( não estou bem certo mas deve pertencer ao pacote java.awt.event. Toda vez que o usuário digita uma tecla, ele chama essa rotina de evento e aí vc pode fazer uma verificação. Se o que ele digitou não é válido, exiba um JOptionPane.showMessageDialog avisando.
Acho que isso pode te ajudar.
A situação é a seguinte, eu tenho os JTextField cliente e motorista eu gostaria de validar estes dois campos em uma tabela no banco de dados, caso não estejam cadastrados que o foco retornasse para o proprio campo. Como eu faço isto? Eu faço no momento da digitação ou após digitar todo o forumulario.
Desde já agradeço.
Marcos
Vc deve fazer isso depois que o usuário digita os campos. Para retornar o foco para o determinado campo vc deve utilizar o método requestFocus() indicando qual o field ex:
motoristaField.requestFocus();
Ficaria interessante também fazer a verificação durante a digitação, porém, vc deverá fazer consultas a cada tecla que o usuário digitar. Cada vez que ele digita, faz uma consulta e avisa através de algum JTextField com região de edição desativada (setEditable( false )). O único problema é que toda hora ele fica consultando o db. Imagina 20 usuários utilizando esse db ao mesmo tempo e digitando até 6 teclas por segundo? Alguns dbs talvez não aguentariam tantas conecções simultâneas.
Ainda acho melhor vc utilizar a verificação depois.
Wanderson, na realidade não seria a cada tecla que deve ser validado no bd e sim após digitar todo o campo, por exemplo, assim que digitar o codigo do cliente o sistema deve validar o cliente digitado e tambem mostrar o nome em um outro JTextField.
A minha duvida é porque em outras linguagens é feito desta maneira e eu não sei como seria em java.
Marcos
Marcos, a diferenca e que ele nao valida se os dados foram alterados, ele sempre dispara o evento…
declare uma variavel do tipo boolean para saber se deve disparar o evento
boolean validaUsuario = true;
textCD_USUARIO.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusLost(java.awt.event.FocusEvent evt) {
textCD_USUARIOFocusLost(evt);
}
});
private void textCD_USUARIOFocusLost(java.awt.event.FocusEvent evt) {
if ( validaUsuario ) {
validaUsuario = false;
if ( !textCD_USUARIO.getText().trim().equals("") ) {
// Validar aqui
if ( // se nao for valido ) {
modulo.mensagem("Usuário não cadastrado", "A");
textCD_USUARIO.requestFocus();
}
}
} else
validaUsuario = true;
}
eu tenho uma aplicacao em delphi e tive o mesmo problema… por enquanto resolvi assim… espero ter ajudado… um abraço
Jota