Pessoal tenho uma aplicação , num Frame possui um JComboBox editável a pessoa digita e retorna objetos tenho um problema qndo a pessoa digita e aperta ENTER ele retorna os obejtos mas qndo a pessoa clika no JComboBox ele dispara o método tbm tem alguma opção de setar Falso no evento do Click no JComboBox ?
publicListselecionaPosto(StringnomePosto){ListlistaPosto=newArrayList();PostoBeanpostoBean=null;try{Statementstmt=con.createStatement();StringBufferbQuery=newStringBuffer();bQuery.append("SELECT * FROM Posto WHERE Nome LIKE ");bQuery.append(" '%"+nomePosto.trim()+"%' ");bQuery.append(" ORDER BY Nome");ResultSetrs=stmt.executeQuery(bQuery.toString());while(rs.next()){postoBean=newPostoBean();postoBean.setCodigo(rs.getInt("ID_Posto"));postoBean.setNome(rs.getString("Nome"));postoBean.setBairro(rs.getString("Bairro"));postoBean.setNumeroRua(rs.getInt("Numero"));postoBean.setRua(rs.getString("Rua"));listaPosto.add(postoBean);}stmt.close();}catch(SQLExceptionex){System.err.println("Erro ao selecionar o Posto.\n "+ex.getMessage());}returnlistaPosto;}}
Consequentemente chama o pesquisaPosto(ae) que está postado acima , como faço para ter um controle com KeyListener ?
Agradeço a ajuda !
Qndo a pessoa digita e aperta ENTER dispara o método pesquisaPosto(ae) mas qndo a pessoa click no JComboBox é um evento tbm então dispara o mesmo método duplicando os dados no JComboBox já usei removeAllItens() mas não obtive resultado …
kinow
Eae cara, sexta feira… dia de dormir muito hahaha, depois de programar muito… então, fiz um código que acredito ser semelhante ao seu… vou colar ele e depois explico o que fiz.
/* * Autor: Bruno de Paula Kinoshita * Data: 30/06/2005 */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;publicclassFrame2extendsJFrameimplementsActionListener,KeyListener{protectedJComboBoxjComboBox=newJComboBox(newString[]{"Bruno","GUJ","OS"});protectedJPaneljPanel=newJPanel();publicFrame2()throwsHeadlessException{super();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);Containercontainer=this.getContentPane();container.add(jPanel);}publicstaticvoidmain(String[]args){Frame2fs=newFrame2();fs.pack();fs.setVisible(true);}publicvoidactionPerformed(ActionEvente){/* System.out.println ( jComboBox.getSelectedItem().toString()); */}publicvoidkeyPressed(KeyEvente){}publicvoidkeyReleased(KeyEvente){if(e.getKeyCode()==10){System.out.println(jComboBox.getSelectedItem().toString());}}publicvoidkeyTyped(KeyEvente){/*System.out.println ( jComboBox.getSelectedItem().toString());*/}}
Então… eu criei uma classe filha da JFrame e implementadora da interface ActionListener e KeyListener… mas se vc define como editable(true), o jcombobox, o keylistener não registra os eventos… logoooo… usei um JTextComponent para capturar o editor do JComboBox… e coloquei o keylistener no editor… enfim… eu verifiquei se o KeyCode do evento é igual a 10 (ENTER do teclado, descobri com uns sysouts) … e então executo a ação… voilà! Caso precise de algo, só mandar… Abraços, espero ter ajudado.
ramilani12
kinow:
Eae cara, sexta feira… dia de dormir muito hahaha, depois de programar muito… então, fiz um código que acredito ser semelhante ao seu… vou colar ele e depois explico o que fiz.
/* * Autor: Bruno de Paula Kinoshita * Data: 30/06/2005 */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;publicclassFrame2extendsJFrameimplementsActionListener,KeyListener{protectedJComboBoxjComboBox=newJComboBox(newString[]{"Bruno","GUJ","OS"});protectedJPaneljPanel=newJPanel();publicFrame2()throwsHeadlessException{super();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);Containercontainer=this.getContentPane();container.add(jPanel);}publicstaticvoidmain(String[]args){Frame2fs=newFrame2();fs.pack();fs.setVisible(true);}publicvoidactionPerformed(ActionEvente){/* System.out.println ( jComboBox.getSelectedItem().toString()); */}publicvoidkeyPressed(KeyEvente){}publicvoidkeyReleased(KeyEvente){if(e.getKeyCode()==10){System.out.println(jComboBox.getSelectedItem().toString());}}publicvoidkeyTyped(KeyEvente){/*System.out.println ( jComboBox.getSelectedItem().toString());*/}}
Então… eu criei uma classe filha da JFrame e implementadora da interface ActionListener e KeyListener… mas se vc define como editable(true), o jcombobox, o keylistener não registra os eventos… logoooo… usei um JTextComponent para capturar o editor do JComboBox… e coloquei o keylistener no editor… enfim… eu verifiquei se o KeyCode do evento é igual a 10 (ENTER do teclado, descobri com uns sysouts) … e então executo a ação… voilà! Caso precise de algo, só mandar… Abraços, espero ter ajudado.
Pois é , por isso eu implementava o KeyListener os eventos não respondiam , é isso mesmo que queria Cara , brigadão…
Sexta dormir …ta louco se me chefe liberasse… 8)