Problema com FocusGained e FocusLost

2 respostas
elituh

Buenas,
Bom, a lógica do programa é que se eu cair no campo CONFIRMA SENHA ele deve dar um aviso pra digitar a senha no campo acima e somente depois pode digitar no campo CONFIRMA SENHA, acontece que quando eu caio no FocusGained do 'TFConfirmaUsuarioSenha()' ele da o aviso e cai no FOCUS GAINED do 'TFUsuarioSenha()' que por sua vez não tem nada dentro mas ai ele fica dando o aviso sempre, eu só nao entendi pq ele da esse aviso, deveria dar a possibilidade de eu digitar a senha no campo de cima, certo? ou esse grabFocus(); não faz o que eu imagino que faca (coloca o foco no campo)??

Segue o código:

private JTextField TFUsuarioSenha() {
		usuarioSenha = new JPasswordField();
		usuarioSenha.setBounds(90, 100, 80, 20);
		usuarioSenha.addFocusListener(new FocusListener() {
			@SuppressWarnings("deprecation")
			public void focusLost(FocusEvent arg0) {
				if (usuarioSenha.getText().trim().length() > 10) {
					JOptionPane.showMessageDialog(null, "Campo  aceita 10 caracteres");
					usuarioSenha.grabFocus();
				}
			}
			public void focusGained(FocusEvent arg0) {
			}
		});		
		return usuarioSenha;
	}
	
	private JTextField TFConfirmaUsuarioSenha() {
		confirmaUsuarioSenha = new JPasswordField();
		confirmaUsuarioSenha.setBounds(90, 130, 80, 20);
		confirmaUsuarioSenha.addFocusListener(new FocusListener() {
			@SuppressWarnings("deprecation")
			public void focusLost(FocusEvent arg0) {
				if (confirmaUsuarioSenha.getText().trim().length() > 10) {
					JOptionPane.showMessageDialog(null, "Campo  aceita 10 caracteres");
					confirmaUsuarioSenha.grabFocus();
				} else {
					if (usuarioSenha.getText().trim().length() > 0) {
						if (! usuarioSenha.equals(confirmaUsuarioSenha)) {
							JOptionPane.showMessageDialog(null, "Senhas não são iguais \n Certifique-se que a tecla CAPS LOCK está desligada!");
							confirmaUsuarioSenha.setText("");
							confirmaUsuarioSenha.grabFocus();						
						}
					}
				}
			}
			@SuppressWarnings("deprecation")
			public void focusGained(FocusEvent arg0) {
				if (usuarioSenha.getText().trim().length() == 0) {
					JOptionPane.showMessageDialog(null, "Digite a senha no campo 'Senha' antes!");
					usuarioSenha.grabFocus();
				}
			}
		});		
		return confirmaUsuarioSenha;
	}

2 Respostas

marcoslogan

Até onde eu sei, é pra se usar o método requestFocus(). Pelo menos eu uso esse.
Mas eu tive problemas também com o foco.

Ele também não fazia o que devia.

elituh

Eu usei o requestFocus() no lugar do grabFocus() mas ele se comporta da mesma forma.

Criado 4 de novembro de 2011
Ultima resposta 5 de nov. de 2011
Respostas 2
Participantes 2