Ajuda com JComboBox

5 respostas
ramilani12

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 ?

este o código:

FramePosto

private void pesquisaPosto(ActionEvent ae){
		String nomePosto;
		try{
			
			nomePosto=(String) jPosto.getSelectedItem(); 
			List listaPosto = postoDAO.selecionaPosto(nomePosto);
			Iterator it = listaPosto.iterator();
			PostoBean postoBean = new PostoBean();
				//jPosto.removeAllItems();
				while (it.hasNext()) {
					postoBean=(PostoBean)it.next();
					jPosto.addItem(postoBean.getNome());
				}
		}catch(Exception ex){
				System.err.println("Erro I/O.\n "+ex.getMessage());
		}
	
	}

PostoDAO:

public List selecionaPosto (String nomePosto) {
		List  listaPosto = new ArrayList();
		PostoBean postoBean=null;
		 try{
		    Statement stmt = con.createStatement();
		    StringBuffer bQuery= new StringBuffer();
		                 bQuery.append("SELECT * FROM Posto WHERE Nome LIKE ");
		                 bQuery.append(" '%"+nomePosto.trim()+"%' ");
		                 bQuery.append(" ORDER BY Nome");
		    ResultSet rs =stmt.executeQuery(bQuery.toString());
		    	while(rs.next()) {
		    		postoBean=new PostoBean();
		    		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 (SQLException ex) {
		   	 System.err.println("Erro ao selecionar o Posto.\n "+ex.getMessage());
		   }
     return listaPosto;
		
	}
}

Desde já agradeço ajuda !

5 Respostas

kinow

Se ele digita Enter, ele executa, e tudo ocorre bem? Isso?

Agora se ele clica no JComboxBox, envia o método… mas qual método, do DAO?

Você está usando um ActionListener no JComboBox? :? :? :?

ramilani12

kinow:
Se ele digita Enter, ele executa, e tudo ocorre bem? Isso?

Agora se ele clica no JComboxBox, envia o método… mas qual método, do DAO?

Você está usando um ActionListener no JComboBox? :? :? :?

Isso se ele digita enter ocorre tudo bem, mas qndo clica no JComboBox ele duplica os métodos estou usando ActionListener

dá uma olhada:

jPosto.addActionListener(
				new ActionListener(){
					public void actionPerformed(ActionEvent ae){
						pesquisaPosto(ae);
					}
				}
		);

Consequentemente chama o pesquisaPosto(ae) que está postado acima , como faço para ter um controle com KeyListener ?

Agradeço a ajuda !

ramilani12

ramilani12:
kinow:
Se ele digita Enter, ele executa, e tudo ocorre bem? Isso?

Agora se ele clica no JComboxBox, envia o método… mas qual método, do DAO?

Você está usando um ActionListener no JComboBox? :? :? :?

Isso se ele digita enter ocorre tudo bem, mas qndo clica no JComboBox ele duplica os métodos estou usando ActionListener

dá uma olhada:

jPosto.addActionListener(
				new ActionListener(){
					public void actionPerformed(ActionEvent ae){
						pesquisaPosto(ae);
					}
				}
		);

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
 */
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;

public class Frame2 extends JFrame implements ActionListener, KeyListener
{

    protected JComboBox jComboBox = new JComboBox(new String[]{"Bruno", "GUJ", "OS"});
    protected JPanel jPanel = new JPanel();
    
    public Frame2() throws HeadlessException
    {
        super ( );
        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);
        Container container = this.getContentPane();
        container.add(jPanel);
    }

    public static void main(String[] args)
    {
        Frame2 fs = new Frame2();
        fs.pack();
        fs.setVisible(true);

    }
    
    public void actionPerformed(ActionEvent e)
    {
        /* System.out.println ( jComboBox.getSelectedItem().toString()); */
    }
    
    public void keyPressed(KeyEvent e)
    {
    }
    
    public void keyReleased(KeyEvent e)
    {
        if(e.getKeyCode() == 10)
        {
            System.out.println ( jComboBox.getSelectedItem().toString());
        }
    }
    
    public void keyTyped(KeyEvent e)
    {
        /*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à! :smiley: 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
 */
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;

public class Frame2 extends JFrame implements ActionListener, KeyListener
{

    protected JComboBox jComboBox = new JComboBox(new String[]{"Bruno", "GUJ", "OS"});
    protected JPanel jPanel = new JPanel();
    
    public Frame2() throws HeadlessException
    {
        super ( );
        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);
        Container container = this.getContentPane();
        container.add(jPanel);
    }

    public static void main(String[] args)
    {
        Frame2 fs = new Frame2();
        fs.pack();
        fs.setVisible(true);

    }
    
    public void actionPerformed(ActionEvent e)
    {
        /* System.out.println ( jComboBox.getSelectedItem().toString()); */
    }
    
    public void keyPressed(KeyEvent e)
    {
    }
    
    public void keyReleased(KeyEvent e)
    {
        if(e.getKeyCode() == 10)
        {
            System.out.println ( jComboBox.getSelectedItem().toString());
        }
    }
    
    public void keyTyped(KeyEvent e)
    {
        /*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à! :smiley: 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)

Abração

Criado 30 de junho de 2005
Ultima resposta 1 de jul. de 2005
Respostas 5
Participantes 2