Evento no JTextField

Ola,

Bem, acredito q a solução seja muito simples, vai ver q é por isso q num to encontrando … rsss …

Tenho uma JTextField e eu quero colocar um evento q assim q ela perder o foco execute um método para verificação dos dados que foram digitados.

Como eu faço isso ?

Brigaduuuu

Adiciona um listener para o focus, exemplo:


jTextField1.addFocusListener(new FocusAdapter() {
            public void focusLost(FocusEvent e) {
                //adicionar sua verificação aqui
                JOptionPane.showMessageDialog(null, "Teste");
            }
        });

Silva,

Código gerado pelo Ve do Eclipse

jTextField.addFocusListener(new java.awt.event.FocusAdapter() { public void focusLost(java.awt.event.FocusEvent e) { System.out.println("focusLost()"); // TODO Auto-generated Event stub focusLost() } });

Márcio

Demorei para puxar o gatilho

Beleza Marcio,

Até ai bele …

Mas e agora … como eu pego o valor da JTextField … para q eu possa executar o método q faz a verificação ? …

Putz … to todo colado …rsss

Esse código pega o valor que está no JTextField, por exemplo se o nome do seu JTextField é text1 vai ficar assim:

text1.getText();

Deixa eu detalhar mais… se vc quiser pegar o valor do e imprimir na tela por exemplo em uma Janela, o código vai ficar assim:

String texto = text1.getText(); System.out.println(texto);

Resolvindo pessoal … brigadão pela ajuda …

To postando aqui a parte do código pra pra verem com ficou … e vai q alguem precise deste empurrãozinho …

	private JFormattedTextField getJftfCPF() {
		if (jftfCPF == null) {
			jftfCPF = new JFormattedTextField(setMascara("###.###.###-##"));
			jftfCPF.setBounds(new Rectangle(235, 135, 103, 20));			
			//somente digitar numeros
			jftfCPF.addKeyListener(new java.awt.event.KeyAdapter() {
				public void keyTyped(java.awt.event.KeyEvent e) {
					char c = e.getKeyChar();
					if(!Character.isDigit(c)){
						e.consume();
					}
				}
			});
			//verifica se o CPF é válido
			jftfCPF.addFocusListener(new java.awt.event.FocusAdapter() {
				public void focusLost(java.awt.event.FocusEvent e) {
					String cpf = jftfCPF.getText();
					  if ((validaCpf (cpf)))
					  {
					   // System.out.println("OK");
					    
					  }
					  else
					  {
						  JOptionPane.showMessageDialog(null, "CPF inválido","ERROR", JOptionPane.ERROR_MESSAGE);
					    jftfCPF.setText("");
					  }
				}
			});
		}
		return jftfCPF;
	}

Boa noite pessoal,

Estou precisando da ajuda de vocês aproveitando essa discussão.

Estou tentando tratar a perda do focus, e quando o tamanho do registro for menor que 10 reenvio o focus para o campo enviando uma mensagem. O problema é que este evento esta tratando tando a perda quando o recebimento de focus. Poderiam me ajuda!

jtfFunDatNas.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusLost(java.awt.event.FocusEvent evt) {
if (jtfFunDatNas.getText().trim().length() < 10){
JOptionPane.showMessageDialog(null,“Data inválida!”,
“Aviso”,JOptionPane.ERROR_MESSAGE);
jtfFunDatNas.requestFocus();
jtfFunDatNas.selectAll();
}
}
});

Obrigado,
Luiz

Pessoal, muito melhor que o focus lost é inserir um inputVerifier no seu JTextField.

Por exemplo, o InputVerifier abaixo garante que o usuário tem um valor numérico no JTextField:

inputText.setInputVerifier(new InputVerifier() { public boolean verify(JComponent comp) { boolean returnValue = true; JTextField textField = (JTextField)comp; String content = textField.getText(); if (content.length() != 0) { try { Integer.parseInt(textField.getText()); } catch (NumberFormatException e) { returnValue = false; } } return returnValue; } public boolean shouldYieldFocus(JComponent input) { boolean valid = super.shouldYieldFocus(input); if (!valid) { getToolkit().beep(); } return valid; } });

O método validate do inputVerifier, se retornar true, fará o JTextField avançar o foco. Caso contrário, o JTextField ficará parado, no mesmo componente. É mais limpo e você evita uma série de problemas relacionados a foco.

Para mais informações: http://java.sun.com/developer/JDCTechTips/2001/tt1120.html

Opa pessoal.

Estou tendo problemas com Eclipse + vep
na perda de foco do componente.

Alguém pode ajudar?

private SGCalendar getEdtDataPrevisaoPagamento()
{
if(edtDataPrevisaoPagamento == null)
{
edtDataPrevisaoPagamento = new SGCalendar();
edtDataPrevisaoPagamento.setBounds(new Rectangle(80, 76, 94, 20));

		edtDataPrevisaoPagamento.addFocusListener(new java.awt.event.FocusAdapter()
		{   
			
			public void focusGained(java.awt.event.FocusEvent e) {    
				System.out.println("focusGained()"); // TODO Auto-generated Event stub focusGained()
			}
			public void focusLost(java.awt.event.FocusEvent e)
			{
				try
				{
					simulacaoPagamentoAVistaController.verificaDataPagamentoInferior(edtDataPrevisaoPagamento.getDate());
				}
				catch (SimulacaoPagamentoAVistaDataInferior e1)
				{
					edtDataPrevisaoPagamento.grabFocus();     
					JOptionPane.showMessageDialog(null, e1.getMessage());
				}
				btnConsultar.setEnabled(true);
				
			}
		});
	}
	return edtDataPrevisaoPagamento;
}

Simplesmente não executa…

Opa valeu galera, fiz umas alterações na minha aplicação e agora as validações são em tempo real
e não na tentativa de cadastrar, ficou muito mais elegante.

Abraço galera