Problema com busca

3 respostas
O

Olá,
a idéia do codigo abaixo é informar ao usuário q a busca está sendo executada. Para isso eu setei o text do searchingLabel para "Procurando..." enquanto é executada a função newSearch():

private JTextField keyWordText = new JTextField();
private JButton keyWordButton = new JButton();
private JLabel searchingLabel = new JLabel();

keyWordButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {                                   
        
	  // pega do Bundle a string referente a "searching" ("Procurando")    
        searchingLabel.setText( messages.getString("searching") + "...");

	  // executa busca no webservice	
	  // demora uns 4segundos
        newSearch();         

	  // seta o text para "";
        searchingLabel.setText("");
    }
}

Bom...
só que não funciona de jeito maneira. já tentei usar CardLayout, repaint() antes do metodo newsearch(), tb não funcionou.

se alguém puder me dar uma ajuda eu agradeciria muito...
vlw
brigadão!!

3 Respostas

cassio

E nem vai funcionar mesmo… Vc tem apenas uma thread executando a interface gráfica do seu programa + todo o processamento pesado da busca. Enquanto a busca está sendo realizada, a interface “morre”, não responde msmo. Para que isso não aconteça vc precisa criar outra thread pra fazer o trabalho pesado, deixando sua interface funcional mesmo enquanto a busca ainda não terminou.
Dá uma estudada em Threads e na classe SwingWorker (tem no site da Sun e faz extamente isso, cria uma thread a partir de uma interface gráfica para fazer o “trabalho pesado”).

Abraço!

O

blz… valeu!!!
vou fazer isso!!

O

rapaz... deu certinho!!!
vlw msm...

olha como ficou:

private JTextField keyWordText = new JTextField(); 
private JButton keyWordButton = new JButton(); 
private JLabel searchingLabel = new JLabel(); 

keyWordButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {                                   
         
          final SwingWorker worker = new SwingWorker() {

              public Object construct() {
         
                  // pega do Bundle a string referente a "searching" ("Procurando")    
                  searchingLabel.setText( messages.getString("searching") + "...");
                  return null;
              }         
 
 	  
              public void finished() {
                  // executa busca no webservice	
	          // demora uns 4segundos
                  newSearch();         
 
          	  // seta o text para "";
                  searchingLabel.setText("");
              }
          };
          worker.start();

     }
 }
Criado 18 de agosto de 2006
Ultima resposta 21 de ago. de 2006
Respostas 3
Participantes 2