Como posso colocar testes ao sair de algum JtextField

Trabalhando com Swing, tenho 5 JtextField´s em um panel, e preciso fazer um teste específico cada vez que sair de um destes Jtextfields, porem nao estou conseguindo, tentei utilizar o evento FocusLost, porem foi uma decepcao.

Mas porque? O evento focusLost() não foi disparado? Ou não funcionou? Qual o problema (mais detalhadamente)?

sidnei…estranho nao funcionar o focuslost…ele deveria disparar…
vc ja tentou usar o ActionListener??

ate mais…

Toda vez que teclo alguma coisa o evento focuslost é disparado, ou, parece que este é o sintoma, preciso de algo que seja executado somente quando realmente sair do jtexfield.

  • Outro detalhe, tenho o java 1.2 e 1.4, em ambos o comportamento
    do focuslost é o mesmo, porém no 1.4 se houver mais de um
    jtextfield com o evento focuslost ligado, o programa tranca.

[quote=“richardpeder”]sidnei…estranho nao funcionar o focuslost…ele deveria disparar…
vc ja tentou usar o ActionListener??

ate mais…[/quote]

Quanto ao ActionListener, só consegui fazer o programa disparar este
evento quando pressiono a tecla entra, porém preciso de algo que
seja executado toda vez que sair do campo.
Quanto a sua citacao “Estrano nao funcionar”, o que parece acontecer
é que a cada tecla pressionada o procedimento focuslost é executado,
e isto é um incomodo sem par, alem do mais no java 1.4 nao consegui
que mais de um jtextfield tivesse o evento focuslost acionado pois o programa trava. (no java 1.2 o fato de ter mais de um jtextfield com o
evento focuslost acionado nao causava este travamento, apesar de apresentar o sintoma acima descrito.)

Sidney, eu estou longe da minha maquina de desenvolvimento…
Tente comparar o seu código com o seguinte:

class MeuFrame extends JFrame implements FocusListener {

   private JTextField txtA;
   private JTextField txtB;

   public MeuFrame() {
      txtA = new JTextField();
      txtB = new JTextField();

      setSize(300, 200);
      
      txtA.addFocusListener(this);
      txtB.addFocusListener(this);

      JPanel p = new JPanel();
      p.setLayout(new FlowLayout(FlowLayout.CENTER));

      p.add(txtA);
      p.add(txtB);

      getContentPane().add(p, BorderLayout.SOUTH);
   }

   public void focusGained(FocusEvent e) { // não faz nada aqui }

   public void focusLost(FocusEvent e) {
      Object o = e.getSource();
      if (o == txtA) JOptionPane.showMessageDialog(this, "Deixou A");
      else if (o == txtB) JOptionPane.showMessageDialog(this, "Deixou B");
   }
}

public class Teste {
   public static void main(String[] args) {
      JFrame f = new MeuFrame();
      f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      f.setVisible(true);
   }
}

Não esqueça dos imports.
(*** talvez tenha que dar uma adaptada, como disse não tenho referência aqui, pode dar um errinho ou outro, mas o esqueleto é esse ai ***)

Espero ter ajudado.

Sidnei…
pensei em um keyListener() onde vc poderia coloca-lo no JTextField e cada vez que o usuario pressionasse uma determinada tecla (vc deve comparar essa tecla com o evento de pressionamento(KeyEvent) aconteceria alguma coisa no textfield…
eh mais uma ideia!!! :lol: :wink:

ate mais…

Abaixo segue exemplo do programa, nao sei porque mas em java 1.2
quando pressiono TAB passa MUITAS vezes pela rotina definida no
focuslost, e em java 1.4 é mostrada uma janela de mensagem
vazia e nao sai mais.

import java.awt.;
import java.awt.event.
;
import javax.swing.;
import javax.swing.border.
;

public class Teste extends JFrame implements FocusListener {

private JTextField txtA;
private JTextField txtB;

public Teste() {
txtA = new JTextField();
txtB = new JTextField();

  setSize(300, 200); 
  
  txtA.addFocusListener(this); 
  txtB.addFocusListener(this); 

  JPanel p = new JPanel(); 
  p.setLayout(new FlowLayout(FlowLayout.CENTER)); 

  p.add(txtA); 
  p.add(txtB); 

  txtA.setText ("          ");
  txtB.setText ("          ");

  getContentPane().add(p, BorderLayout.SOUTH); 

}

public void focusGained(FocusEvent e) {
// Nao faz nada aqui
}

public void focusLost(FocusEvent e) {
Object o = e.getSource();
if (o == txtA) JOptionPane.showMessageDialog(this, “Deixou A”);
else if (o == txtB) JOptionPane.showMessageDialog(this, “Deixou B”);
}

public static void main(String[] args) {
JFrame f = new Teste();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
}
}

Olha… pelo que parece, o que esta causando esse problema da janela que se abre a nao fecha mais é por causa do JOptionPane… Fiz um teste usando um System.out.println() mesmo, e funcionou direitinho…

[]´s