Java - Buscar desde un Jcombobox

 
Vista:
Imágen de perfil de Jhon

Buscar desde un Jcombobox

Publicado por Jhon (1 intervención) el 09/06/2018 19:01:23
Hola amigos,

Tengo un problema con mi código, he realizado bien el ejercicio, me realiza la búsqueda, muestra los resultados de la búsqueda con coincidencia.

El problema es que no me deja digitar mas de un caracter en el Jcombobox, al tipear un letra esta queda seleccionada y esto procova que al tipear otro caracter este borre el anterio. Me pueden ayudar?

Tengo un Jpanel donde tengo el siguiente codigo en el constructor "initComponents();"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/////INICIO DEL BUSCAR DESDE EL JCOMBOBOX
 
vbuscarbox.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
    @Override
    public void keyReleased(KeyEvent evt) {
 
        String cadenaEscrita = vbuscarbox.getEditor().getItem().toString();
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            if (comparar(cadenaEscrita)) {// compara si el texto escrito se ecuentra en la lista
                // busca el texto escrito en la base de datos
                buscar(cadenaEscrita);
            } else {// en caso contrario toma como default el elemento 0 o sea el primero de la lista y lo busca.
               buscar(vbuscarbox.getItemAt(0).toString());
               vbuscarbox.setSelectedIndex(0);
            }
        }
        //No permite digitar algo diferente de letras
        if (evt.getKeyCode() >= 65 && evt.getKeyCode() <= 90 || evt.getKeyCode() >= 96 && evt.getKeyCode() <= 105 || evt.getKeyCode() == 8) {
            vbuscarbox.setModel(operacion.getLista(cadenaEscrita));
            if (vbuscarbox.getItemCount() > 0) {
                vbuscarbox.getEditor().setItem(cadenaEscrita);
                vbuscarbox.showPopup();
            }
                else {
                vbuscarbox.addItem(cadenaEscrita);
            }
        }
    }
});
////FIN DEL BUSCAR DESDE EL JCOMBOBOX

y he creado dos metodos mas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public void buscar(String nombre) {
        String datos[] = operacion.buscar(nombre);
 
        if (datos[0] != null) {
//            jTextField1.setText(datos[0]);
//            jTextField2.setText(datos[1]);
//            jTextField3.setText(datos[2]);
//            jTextField4.setText(datos[3]);
 
        } else {
        }
    }
 
    private boolean comparar(String cadena) {
 
        Object[] lista = vbuscarbox.getComponents();
        boolean encontrado = false;
        for (Object object : lista) {
            if (cadena.equals(object)) {
                encontrado = true;
                break;
            }
 
        }
        return encontrado;
    }

Y la clase BuscarCargoUsuario asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package Util;
 
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultComboBoxModel;
 
/**
 *
 * @author Dragon
 */
public class BuscarCargoUsuario {
 
    public DefaultComboBoxModel getLista(String cadenaEscrita){
 
        DefaultComboBoxModel modelo = new DefaultComboBoxModel();
 
        try {
            Util.Conexion con = new Util.Conexion(Util.Conexion.ipdb, Util.Conexion.portdb, Util.Conexion.namedb, Util.Conexion.userdb, Util.Conexion.passdb);
            con.ConexionMySQL();
            String query = "SELECT NombreGrupo FROM us_grupocar WHERE NombreGrupo LIKE '%" + cadenaEscrita + "%';";
            java.sql.ResultSet rs = con.consultar(query);
 
            while (rs.next()) {
                modelo.addElement(rs.getString("NombreGrupo"));
            }
        } catch (ClassNotFoundException | SQLException | InstantiationException | IllegalAccessException ex) {
            Logger.getLogger(BuscarCargoUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
 
 
        return modelo;
    }
 
 
    public String[] buscar(String nombre){
 
        String[] datos = new String[4];
        try {
            Util.Conexion con = new Util.Conexion(Util.Conexion.ipdb, Util.Conexion.portdb, Util.Conexion.namedb, Util.Conexion.userdb, Util.Conexion.passdb);
            con.ConexionMySQL();
            String query = "SELECT NombreGrupo FROM us_grupocar WHERE NombreGrupo LIKE '%" + nombre + "%';";
            java.sql.ResultSet rs = con.consultar(query);
 
            while (rs.next()) {
                for (int i = 0; i < datos.length; i++) {
                    datos[i] = rs.getString(i + 1);
                }
            }
        } catch (ClassNotFoundException | SQLException | InstantiationException | IllegalAccessException ex) {
            Logger.getLogger(BuscarCargoUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return datos;
    }
 
}

Al ejecutar la aplicación e iniciar una búsqueda, los caracteres digitados queda sombreado y esto hace que el siguiente carácter reemplace el anterior.

20180609115752

Uso Netbeans 8.2 y MariaDB 10

Alguien puede ayudarme a solucionarlo?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder