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
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
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
mfp.c
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
classCadastroAnalistaDAO {
publicList<CadastroAnalista>findByName(Stringname) {
StringSQL="Select * from cadastro_analista where nome = '" + name + "'";
ResultSetrs;
List<CadastroAnalista>analistas = newArrayList<CadastroAnalista>();
try {
rs=MeuState.executeQuery(SQL);
while(rs.next()) {
CadastroAnalistaanalista = newCadastroAnalista();
analista.setNome(rs.getString("nome"));
analista.setCargo(rs.getString("cargo"));
analistas.add(analista);
}
}
catch(Exceptione) {
e.printStackTrace();
}
returnanalistas;
}
}
e na sua classe de lógica, você pode fazer…
privatevoidtfNomeKeyPressed(java.awt.event.KeyEventevt){CadastroAnalistaDAOdao=newCadfastroAnalistaDAO();List<CadastroAnalista>analistas=dao.findByName(campo.getText());//faz o resto da lógica}
ramilani12
Oh saudades de programar para Desktop
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
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
packagebr.com.guj.forums;importjava.awt.Container;importjava.awt.Dimension;importjava.awt.FlowLayout;importjava.awt.HeadlessException;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjavax.swing.JComboBox;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.text.JTextComponent;importjava.sql.*;importjavax.swing.*;publicclassJFrame2extendsJFrameimplementsActionListener,KeyListener{privateStringurl;privateStringusername;privateStringpassword;privateConnectionMinhaConexao=null;privateStatementMeuState=null;privateResultSetrs;privateJTextFieldtfCargo;privateJComboBoxjComboBox;protectedJPaneljPanel=newJPanel();publicJFrame2()throwsHeadlessException{//conexão com o Banco de Dadosif(MinhaConexao==null){try{url="jdbc:mysql://localhost/bancoretaguarda";username="root";Class.forName("com.mysql.jdbc.Driver");ConnectionMinhaConexao=DriverManager.getConnection(url,username,password);MeuState=MinhaConexao.createStatement();}catch(Exceptionec){if(ec.getMessage().equals("General error"))JOptionPane.showMessageDialog(null,"Cadastro não pode ser efetuado");elseJOptionPane.showMessageDialog(null,"Sem conexão com o BD"+"\n"+ec.getMessage(),"ERRO",JOptionPane.ERROR_MESSAGE);}}jComboBox=newjavax.swing.JComboBox();tfCargo=newJTextField(15);try{StringSQL="Select * From cadastro_analista";rs=MeuState.executeQuery(SQL);while(rs.next()){jComboBox.addItem(rs.getString("Nome"));//lista todos os nomes no JComboBoxjComboBox.setSelectedItem(null);}}catch(Exceptiona){}this.setDefaultCloseOperation(3);this.setPreferredSize(newDimension(640,480));jPanel.setLayout(newFlowLayout(FlowLayout.CENTER));jComboBox.setEditable(true);JTextComponenteditor=(JTextComponent)jComboBox.getEditor().getEditorComponent();editor.addKeyListener(this);jComboBox.addActionListener(this);jComboBox.addKeyListener(this);jPanel.add(jComboBox);jPanel.add(tfCargo);Containercontainer=this.getContentPane();container.add(jPanel);}publicstaticvoidmain(String[]args){JFrame2fs=newJFrame2();fs.pack();fs.setVisible(true);}publicvoidactionPerformed(ActionEvente){}publicvoidkeyPressed(KeyEvente){}publicvoidkeyReleased(KeyEvente){if(e.getKeyCode()==10){System.out.println(jComboBox.getSelectedItem().toString());if(jComboBox.getSelectedItem().toString()!=null){try{StringSQL="Select Nome, Cargo From cadastro_analista where nome='"+jComboBox.getSelectedItem().toString()+"'";rs=MeuState.executeQuery(SQL);while(rs.next()){tfCargo.setText(rs.getString("Cargo"));}}catch(Exceptiona){}}}}publicvoidkeyTyped(KeyEvente){/*System.out.println ( jComboBox.getSelectedItem().toString());*/}}