validação de campo ao perder foco [resolvido]

3 respostas
F

e aí galera!!??

após dar um procurada não encontrei uma solução interessante para o problema que estou tendo…

tenho um jpanel com diversos objetos, em sua maioria jtextfield, sendo que desejo validar os campos, sendo em casos campos com valores a serem validados, como datas, cpf, campos de codigo de chave extrangeira (tipo validar se o código informado existe no relacionamento do banco de dados) e campos de preenchimento obrigatório…

utilizei o método focusLost, porém estou tendo dificuldades em tratar o seguinte… desejo efetuar a validação somente quando um objeto perde foco para um objeto que esteja na frente… ou seja, se eu estiver em um campo de o valor não pode ser “em branco” eu não posso prosseguir (caso tente aparecerá uma joptionpane dizendo que o valor é inválido), contudo se eu voltar para o campo anterior ou clicar em qualquer objeto que na ordem que inseri no jpanel estiver antes dele… o tratamento não seja efetuado…

qual melhor forma de tratar esse problema?

Obrigado

3 Respostas

Mauricio_Linhares

É só você usar um FocusListener:

http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/FocusListener.html

Mas eu, como usuário, acho isso a coisa mais chata do mundo… e se eu não quizer preencher na sequência?

_fs

Use input verifier

jcomponent.setInputVerifier( new InputVerifier()
{
	public boolean verify( JComponent component )
	{
		Object value = null;
		boolean returnValue = true;
		
		//if the component allows null and the value is null, doesn't validate
		if( !( isNull() && allowNull ) )
		{
			try
			{
				validateField();
			}
			catch( FieldValidationException ex )
			{
				String message = ex.getMessage();
				int result = UIUtils.showIgnoreEditDialog( message,
					null );

				// edit button pressed (0), must return the focus to the component
				returnValue = result != 0;
			}
		}

		return returnValue;
	}
} );

Se o método verify( JComponent comp ) retorna false, o foco continua no campo, caso contrário transfere o foco normalmente para o próximo componente.

F

valew LIPE … obrigado!!

Criado 20 de junho de 2005
Ultima resposta 29 de jun. de 2005
Respostas 3
Participantes 3