Eventos de teclado[não resolvido]

9 respostas
thiagopassosp

galera estou com a seguinte problema , preciso fazer um jeito de cadastrar e alterar ao mesmo tempo… exemplo
Estou tentando fazer de um jeito que quando o usuario digitar desde a primeira letra vai aparecendo uma listagem de nomes… exemplo

digito (T)

thiago …
telma …

se eu colocar th ja irá filtar e ficará so thiago… isso para pessoas que ja tem o cadastroo
estou tentando pegar o evento de teclado e apartir da primeira letra ele ja vai filtrando se não achar a pessoa é apenas irá cadastrar normal

private void tfNomeKeyPressed(java.awt.event.KeyEvent evt) { try { String SQL="Select * from cadastro_analista"; rs=MeuState.executeQuery(SQL); while(rs.next()); { tfNome.setText(rs.getString("Nome")); tfCargo.setText(rs.getString("Cargo")); } } catch(Exception a) { } }

acho q minha logica esta errada, alguem ai me ajuda???

9 Respostas

thiagopassosp

Tipo assim se a pessoa ja estiver cadastro é so eu aperta enter no seu nome e seus dados irão aparecer nos outros TextField com todas as informação es do cadastro

Zakim
private void tfNomeKeyPressed(java.awt.event.KeyEvent evt) {

ola colega

o parametro evt do tipo Key event deve ser implementado…

sua logica está um tanto errada!

o evt vai receber uma letra e ai vc vai comparar ela com o resultado do seu banco…

cada vez que vc apertar algo entao, vai ter que existir um punhado de case ai para definir qual a letra que vc digitou…

acho melhor vc desacoplar um pouco esse seu metodo…

separe os eventos do banco ok!

thiagopassosp

pode me mandar algum exemplo pratico??

estou perdido nisso amigo, eu entendi mas não compreendi…kkk

M

bem eu faria da seguinte forma:

digitei t:

faço uma busca no banco
e armazeno num vetor todos os resultados

dae a medida q vc for digitando faço a verificação com o vetor em vez de fazer uma nova consulta

thiagopassosp

alguem ai teria como me ajudar com um exemplo prático , estou matutando ja vão fazer umas 3 horas e não saiu nada…
me ajudem galera, estou perdido

thiagopassosp

.

andreiribas

o que o Zakim quis dizer é que você não deve acoplar seu código de acesso a bd junto com a logica do evento, isto é, cria uma classe DAO que é responsável somente pelo aceeso do banco de dados, e coloca todos os métodos de acesso ao bd nessa classe ou classes.

No caso, poderia ficar:

Obs: código só para exemplo, tem algumas más práticas como não usar PreparedStatement, que não estou me lembrando agora hehe

class CadastroAnalistaDAO {

   public List<CadastroAnalista> findByName(String name) {

      String SQL="Select * from cadastro_analista where nome = '" + name + "'";
      ResultSet rs;
      List<CadastroAnalista> analistas = new ArrayList<CadastroAnalista>();
      try {
         rs=MeuState.executeQuery(SQL);
         while(rs.next()) {
            CadastroAnalista analista = new CadastroAnalista();
            analista.setNome(rs.getString("nome"));
            analista.setCargo(rs.getString("cargo"));
            analistas.add(analista);
         }        
      }
      catch(Exception e) {
         e.printStackTrace();
      }
      return analistas;
   }
}

e na sua classe de lógica, você pode fazer…

private void tfNomeKeyPressed(java.awt.event.KeyEvent evt) {                                 
      CadastroAnalistaDAO dao = new CadfastroAnalistaDAO();
      List<CadastroAnalista> analistas = dao.findByName(campo.getText());
//faz o resto da lógica
     }
ramilani12

Oh saudades de programar para Desktop :stuck_out_tongue:

Pelo que entendi vc quer qndo pessoa digite apareca os possiveis registros retornados pela busca
Vc pode usar JComboBox editavel seguido de JTextComponent esse JTextComponet ira capturar o editor do JCombBox , o JComboBoix não implementa a Interface KeyListener

JTextComponent editor = (JTextComponent)jCombobox.getEditor().getEditorComponent();
        editor.addKeyListener(this);
public void keyReleased(KeyEvent ke) {
        if(ke.getKeyCode() == 10) // 10 se refere a tecla ENTER {
        	// seu metodo de busca
        }
    }
thiagopassosp

GALERA obrigado pela ajuda… estou quase conseguindo

o problema é , queria saber se tem como ele procurar na lista automatico como se fosse um JComboBox Normal.
Pois quando eu uso o JComboBox Editavel ele não pesquisa automatico mostrando assim
Exemplo

Digito T
e fica em branco , so aparece a listagem inteira se eu clicar na setinha
alguém ai sabe como fazer isso automatico , quero q ele vai filtrando cada vez q digito um aletra

ai esta meu codigo

package br.com.guj.forums;
 
 import java.awt.Container;
 import java.awt.Dimension;
 import java.awt.FlowLayout;
 import java.awt.HeadlessException;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import java.awt.event.KeyListener;
 
 import javax.swing.JComboBox;
 import javax.swing.JFrame;
 import javax.swing.JPanel;
 import javax.swing.text.JTextComponent;
 import java.sql.*;
  import javax.swing.*;
 
 public class JFrame2 extends JFrame implements ActionListener, KeyListener
 {
 	 private String url;
    private String username;
    private String password;
    private Connection MinhaConexao = null;
    private Statement MeuState = null;    
    private  ResultSet rs;
    private JTextField tfCargo;
    
     private JComboBox jComboBox;
     protected JPanel jPanel = new JPanel();
     
     public JFrame2() throws HeadlessException
     {     			     	 
     	 	    //conexão com o Banco de Dados
     if (MinhaConexao == null){        
         try{        	
         	url = "jdbc:mysql://localhost/bancoretaguarda";
			username= "root";
        	Class.forName("com.mysql.jdbc.Driver");     
        	
        	Connection MinhaConexao = DriverManager.getConnection(url, username, password);
        	MeuState = MinhaConexao.createStatement();
        }
        catch(Exception ec){
        	if(ec.getMessage().equals("General error"))
        		JOptionPane.showMessageDialog(null, "Cadastro não pode ser efetuado");
        		else 
        			JOptionPane.showMessageDialog(null, "Sem conexão com o BD"+"\n"+ec.getMessage(), "ERRO", JOptionPane.ERROR_MESSAGE);
        }
     }       
        	 
         
     	 jComboBox = new javax.swing.JComboBox();     	 
     	 tfCargo = new JTextField(15);
     	 try{     	 
  					String SQL="Select * From cadastro_analista";  				
  				     rs=MeuState.executeQuery(SQL); 
  				     while(rs.next()){
  				     	 jComboBox.addItem(rs.getString("Nome"));  //lista todos os nomes no JComboBox
  				     	 jComboBox.setSelectedItem(null);  				     	 		     	 
  				     }
         }catch(Exception a){}    
      
     	
         
         this.setDefaultCloseOperation(3);
         this.setPreferredSize(new Dimension(640,480));
         jPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
 		 jComboBox.setEditable(true);
         JTextComponent editor = (JTextComponent)jComboBox.getEditor().getEditorComponent();
         editor.addKeyListener(this);         
         jComboBox.addActionListener(this);
         jComboBox.addKeyListener(this);
         jPanel.add(jComboBox);
         jPanel.add(tfCargo);
         Container container = this.getContentPane();
         container.add(jPanel);
     }
 
     public static void main(String[] args)
     {
         JFrame2 fs = new JFrame2();
         fs.pack();
         fs.setVisible(true);
 
     }
     
     public void actionPerformed(ActionEvent e)
     {
     }

     
     public void keyPressed(KeyEvent e)
     {     
     }
     
     public void keyReleased(KeyEvent e)
     {    		
     	
     	
         if(e.getKeyCode() == 10)
         {
             System.out.println ( jComboBox.getSelectedItem().toString());
            if(jComboBox.getSelectedItem().toString()!=null){
            try{     	 
  					String SQL="Select Nome, Cargo From cadastro_analista where nome='"+jComboBox.getSelectedItem().toString()+"'";  				
  				     rs=MeuState.executeQuery(SQL); 
  				     while(rs.next()){        		
         	    	tfCargo.setText(rs.getString("Cargo"));
  				     	}
        		}catch(Exception a){}  
         	}	
          }
    }
             
   
     
     public void keyTyped(KeyEvent e)
     {
         /*System.out.println ( jComboBox.getSelectedItem().toString());*/
     }
 
 }

fica apenas

Criado 22 de julho de 2007
Ultima resposta 23 de jul. de 2007
Respostas 9
Participantes 5