Acessando texto de um JTextField apartir do seu evento

3 respostas
paulork

Olá pessoal, tenho outra duvida…
Eu tenho um JTextField em um JFrame… Esse JTextField tem um evento associado:

private class perdeFoco implements FocusListener{
        public void focusLost(FocusEvent e) {
            validaCampo(textodocampo, operacao);
        }	
    }

esse evento eh executado quando o campo perde o foco e executa uma validação nesse campo, nesse caso a cargo do método “validaCampo”…
esse método deve receber o texto do meu JTextField, e uma “operacao” que eu irei passar manualmente… a minha duvida é como que eu pego
o texto contido no JTextField ao qual ess evento está associado, para que eu possa passá-lo como parametro para o meu metodo validaCampo??

Agradeço muito a atenção

3 Respostas

WRYEL
SeuObjeto seuObjeto = (SeuObjeto) e.getComponent(); //1
SeuObjeto seuObjeto = (SeuObjeto) e.getSource(); //2

fonte1: http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/ComponentEvent.html#getComponent()
fonte2: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/EventObject.html#getSource()

[]'s

ViniGodoy

Para validar campos, não use eventos de foco. Use os InputVerifiers:
http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/InputVerifier.html

É basicamente a mesma coisa, com a diferença que esse é mais seguro. Trocas de foco variam de acordo com a plataforma. Algumas retiram o foco do componente (disparando o evento) e depois retornam a ele de maneira um tanto imprevisível. Tudo isso, o InputVerifier trata automaticamente.

Melhor ainda é se você puder escrever um document, que impede o usuário de digitar coisas erradas:
http://www.guj.com.br/articles/29

paulork

Olá WRYEL muito obrigado pela sua contribuição, não me liguei que através do evento eu poderia “pegar” quem o disparou… agradeço…

ViniGodoy, muito obrigado pela resposta, gostei da “implementação” Document, muito interessante, mas uma coisa me preocupa: para cada tipo de campo eu terei que programar uma classe nova? tipo, para JTextField está naquele link, mas e para o caso de outro campo texto, como por exemplo, um JTextArea, ou qualquer coisa, terei que repedir a programação ou poderei ocupar a mesma classe? todos os objetos que manipulam texto tem o tal de “.setDocument”??

e como eu faria para validar um campo não com tamanho fixo, mas como por exemplo uma validação de DATA, CPF, CNPJ, etc?? usaria uma classe como essa e expressões regulares para validar?? ou tem algo melhor e menos trabalhoso??

Agradeço muito…

Criado 4 de maio de 2012
Ultima resposta 6 de mai. de 2012
Respostas 3
Participantes 3