Como posso colocar testes ao sair de algum JtextField

8 respostas
S

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.

8 Respostas

D

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

richardpeder

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

ate mais…

S

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.
S

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

ate mais…

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.)

D

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.

richardpeder

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…

S

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.<em>;

import java.awt.event.</em>;

import javax.swing.<em>;

import javax.swing.border.</em>;

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);

}

}
R

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

Criado 15 de abril de 2003
Ultima resposta 18 de abr. de 2003
Respostas 8
Participantes 4