Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/07/2011, 14:42
esop
 
Fecha de Ingreso: junio-2011
Mensajes: 14
Antigüedad: 12 años, 10 meses
Puntos: 1
Pregunta Buscador tipo Facebook

Que tal colegas.
Miren tengo el siguiente problema:
Estoy intentando hacer un buscador (tipo Facebook (fotografia,nombre)) que basicamente es un JTextField y al momento de ir escribiendo el nombre de una persona despliega un JPopupMenu con JMenuItems que muestra las coincidendias. Hasta el momento me funciona de maravilla lo unico que no puedo hacer es que, funcione la tecla ENTER en el JPopupMenu ya que al ir escribiendo va mostrando el JPopupMenu con las coincidencias entonces el JTextField pierde el foco lo que hago es regresarlo con RequestFocus al JTextField, pero al hacer eso el JPopupMenu pierde el foco y cuando me cambio de nuevo al JPopupMenu no funciona el ENTER para hacer ejecutar el ActionPerformed tengo que darle clic sobre las opciones para que funcione y quiero que sea con Enter para mayor rapidez.


Alguien ha hecho algo similar? o con que otros controles podre hacer algo parecido?

Les dejo mi codigo pór si pudieran ayudarmen.

Código:
JPopupMenu menu;

private void JTxfBuscadorkeyPressed(java.awt.event.KeyEvent evt){

        menu = new JPopupMenu();
        if(evt.getKeyCode()!=KeyEvent.VK_DOWN&evt.getKeyCode()!=KeyEvent.VK_UP&evt.getKeyCode()!=KeyEvent.VK_RIGHT&evt.getKeyCode()!=KeyEvent.VK_LEFT&evt.getKeyCode()!=KeyEvent.VK_ENTER){             
                    if(!JTxfBuscador.getText().equals("")&&JTxfBuscador.getText().length()>3){
                        if(PersonaEnMira.buscar(JTxfBuscador.getText())){
                            if(PersonaEnMira.getNumeroDeResultados()>0){
                                for(int x=0;x<PersonaEnMira.getNumeroDeResultados();x++){
                                    System.out.println("agregando:" + PersonaEnMira.getResultados()[x][0] +","+ PersonaEnMira.getResultados()[x][1]);
                                    addListaResultados(Integer.parseInt(PersonaEnMira.getResultados()[x][0]), PersonaEnMira.getResultados()[x][1],evt);
                                }
                            }else{
                            menu.add(new JLabel("No se encontraron resultados"));                        
                        }
                        }else{
                            JOptionPane.showMessageDialog(MDIPP, PersonaEnMira.getError(),"Error",JOptionPane.ERROR_MESSAGE);
                        }
                    }
                    
                    menu.show(evt.getComponent(), 0, 20);
                    JTxfBuscador.requestFocus();
                }else if(evt.getKeyCode()==KeyEvent.VK_ENTER){
                    // entra aqui cuando presiono enter y deveria de entrar en 
                    // el evento del JPopUpMenu
        }
        else if(evt.getKeyCode()==KeyEvent.VK_DOWN){
                    System.out.println("Presionó down en else if");
                    menu.requestFocus();
        }
        
    }

private void addListaResultados(final int IdPersona,final String nombre_ap_am,java.awt.event.KeyEvent evt){
        final JMenuItem item;
        controladores.Sistema sistema = new controladores.Sistema();        
item = new JMenuItem(nombre_ap_am,new ImageIcon(sistema.getDirectorioFotografias()+IdPersona+"/perfil_mini.jpg"));
            item.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {                                     
                    System.out.println("cambiando a: " + IdPersona);
                    PersonaEnMira.setIdPersona(IdPersona);
                    bolActualizando = false;
                    PersonaEnMira.refresh();
                    JTxfBuscador.setText("");
                }
            });
            if(evt.getKeyCode()==KeyEvent.VK_ENTER){
                    System.out.println("cambiando a Persona: " + IdPersona);
                    PersonaEnMira.setIdPersona(IdPersona);
                    bolActualizando = false;
                    PersonaEnMira.refresh();
                    JTxfBuscador.setText("");
            }
            menu.add(item);
    }