Llenar JComboBox con MySQL

   Hacer esto es muy fácil, es como llenar una tabla solo que en vez de rellenar un modelo de tabla rellenamos el ComboBox, para recordar como llenar una tabla en MySQL podemos ver la entrada de "Mostrar datos de MySQL en tablas", y para conectar Java con MySQL podemos ver la entrada de "Conectando Java con MySQL".

   Omitiendo la conexión y como hacer una consulta en MySQL, que ya está explicado en entradas anteriores, voy directo al código de como insertar estos datos.

   Supongamos que tenemos un ComboBox de autos, y en la base de datos tenemos la tabla de "Autos" un campo llamado "Tipo", entonces hacemos la consulta correspondiente en MySQL y dentro del "while" para el "ResultSet" hacemos esto:

ComboBox.addItem (
VARIABLE_ResultSet.getObject("Tipo"));

   Con esto simplemente cargamos todos los datos o filas que se encuentren en el campo "Tipo" y los vamos agregando al ComboBox, nada difícil, para un ejemplo concreto tenemos lo siguiente:

import java.io.*;
import java.sql.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class Prueba extends JFrame
{
public static void main (String [] args) throws SQLException
{
//Variables Globales
JFrame contenedor = new JFrame();
JComboBox MiComboBox = new JComboBox();

//Para el manejo de excepciones utilizamos un try y catch
try
{
// Agregamos el contenedor y lo hacemos visible
contenedor.add(MiComboBox);
contenedor.setVisible(true);

// Cargamos el driver
Class.forName("com.mysql.jdbc.Driver");

// Establecemos la conexion
Connection conexion = DriverManager.getConnection ("jdbc:mysql://localhost/mi_db","root", "mi_clave");

// Preparamos la consulta
Statement stat = conexion.createStatement();

// Se realiza la consulta
ResultSet resultado = stat.executeQuery (
"SELECT mi_campo FROM mi_tabla");

// Bucle while para la consulta
while (resultado.next())
{
// Comenzamos a rellenar el combobox a partir de la consulta
MiComboBox.addItem (resultado.getObject("mi_campo"));
}

// Ajustamos el tamaño del frame
contenedor.pack();

// Cerramos la conexión
conexion.close();
}
catch (Exception e)
{
System.out.println (e);
}
}
}

   Espero que esto sirva de ayuda ya que muchos ejemplos en Internet lo muestran muy complicado y no hay nada como lo fácil y rápido cuando se trata de programación.



45 Comentarios

Escribir Comentario
Daniel
AUTOR
19 de febrero de 2010, 15:08 delete

gracias por el codigo, pero tengo una consulta.

mira yo necesito por ejemplo mostrar un marca pero por esta marca que corresponda a un numero.

en mi bdd tengo lo siguiente:

tabbla marcas:
- Codigo
- Nombre

entonces el codigo lo tengo relacionados con las demas tablas.

entonces necesito que cuando en el JCombobox me seleccionene una marca, yo poder rescatar el codigo.

atte: Daniel

Responder
avatar
20 de febrero de 2010, 21:30 delete

Por lo que veo tienes en una tabla el código y el nombre y en otras el resto de la información no!?. Si es así entonces simplemente termina de cargar el resto, ejemplo: si combobox1 = 1 (codigo 1) entonces "aquí realizas la sentencia SQL" Select * (o lo que quieras mostrar) from mitabla where codigo = 1 (codigo mostrado anteriormente)...

Si no es así seria bueno que me muestres parte del código para ayudarte mejor.

Responder
avatar
paola
AUTOR
23 de abril de 2010, 17:51 delete

me gustaria saber como seria con sql 2005

Responder
avatar
24 de abril de 2010, 15:19 delete

Hola Paola, disculpa la tardanza pero actualmente estoy trabajando y siempre estoy full, tampoco he publicado nada nuevo, pero pronto seguire con la programación..... Volviendo a tu pregunta.

En la página de MySQL encontraras el conector necesario, seria cuestión de cargar el conector y hacer lo mismo que en MySQL, solo que en vez de utilizar las sentencias de MySQL usas la del SQL Server 2005 (supongo que es ese, no se).... Suerte! :)

Responder
avatar
Anónimo
AUTOR
14 de junio de 2010, 3:36 delete

hola como estan, quisiera saber
el combobox de visual basic.NET tiene metodos como VALUEMEMBER, "DISPLAYMEMBER"
y el jcombobox de Java tiene .addItem (para añadir valores), entonces cual seria el otro para personalizar o sea para que el usuario
lo vea en la ejecucion asi como el DISPLAYMEMBER del combobox de visual

Responder
avatar
14 de junio de 2010, 8:15 delete

Mmmmm... Hace tiempo que no uso .NET pero que recuerde el DisplayMember era para hacer una acción despues de seleccionar un ComboBox, ¿cierto?

En java no existe dicha propiedad, pero existen muchas formas de hacerte con los eventos, porque eso es lo que es el DisplayMember, un evento, de forma rápida y sencilla puedes usar condiciones IF o puedes hacerlo como deberia ser creando un listener a dicho combobox.

Responder
avatar
Anónimo
AUTOR
15 de junio de 2010, 1:34 delete

Hola estoy programando una aplicacion en java en donde tengo una tabla personal (idpersonal,nombre,apellidos,idcargo) y una tabla cargo (idcargo, cargo) estas dos tablas como ven están relacionadas por el idcargo. El problema que tengo es cómo hacer al momento de registar un nuevo personal. Osea que en el combobox se muestre los nombres de los cargos pero internamente se guarden los idcargo, ya que en la tabla personal no se tienen que guardar los nombres de los cargos sino los ids. Gracias.
D. lo estoy trabajado en capas. Si me puedes poner un ejemplito seria de gran ayuda.No puedo elegir los selectedindex porque los idcargo son autogenerados asi que si elimino uno y agrego otro los indices cambian y por lo tanto esto no serviria

Responder
avatar
15 de junio de 2010, 9:18 delete

Hola, igual que en el comentario anterior puedes hacer un if y else, si combobox1= CargoX entonces id="iDx", por ejemplo:

if (ComboCargo.getSelectedItem.equals("Cargo1"))
id="1"
if (ComboCargo.getSelectedItem.equals("Cargo2"))
id="2"

Y asi vas con cada cargo, es la forma mas sencilla, rápida y funcional que veo de hacer... Lo que no entiendo es eso de que no puedes elejir el indice, si en la tabla tienes que el ID y el cargo es autonumerico esta mal, los cargos y sus respectivos codigos son preestablecidos y no deben cambiar asi como asi, no puedes decir que el id de gerente es 3, mañana 2 y pasado 1, es algo ilógico.

Responder
avatar
Anónimo
AUTOR
22 de julio de 2010, 15:46 delete

No pues, esa es una forma muy estatica para manejar lo requerido, porque supongo k los cargos pueden seguir aumentando.

Responder
avatar
22 de julio de 2010, 20:37 delete

No veo otra forma de colocarlo porque quiere que en el combo salgan los nombres pero que al seleccionar su ID sea el del nombre seleccionado, lo otro que puede hacer es almacenar en la BD los ID por orden de tal forma que la posición en donde este en el ComboBox sea la misma que la del ID, entonces puede utilizarce un instanceador de Objetos.... algo como esto:

public class ClaseObjetoParaComboBox
{
private String nombreDeEjemplo;
private int codigo;

public ClaseObjetoParaComboBox(int codigo, String nombreDeEjemplo)
{
this.codigo=codigo;
this.nombreDeEjemplo=nombreDeEjemplo;
}
public String getNombreDeEjemplo() {
return nombreDeEjemplo;
}

public void setNombreDeEjemplo(String nombreDeEjemplo) {
this.nombreDeEjemplo = nombreDeEjemplo;
}

public int getCodigo() {
return codigo;
}

public void setCodigo(int codigo) {
this.codigo = codigo;
}
}

Con esto puedes tener todo a la mano en forma de objeto que es para lo que fue diseñado Java, pero creo que es algo complicado y por eso lo mostre de otra forma.... Suerte!!

Responder
avatar
19 de diciembre de 2011, 2:19 delete

me gustaria saber pongo un combobox dentro de otro en java si puedes ayudarme t agrdeceria mucho

Responder
avatar
19 de diciembre de 2011, 8:48 delete

Esto no tiene mucho sentido.... Para que quieres hacer eso? No es más fácil que cambien las opciones de un combo según selecciones una opción en el otro?? Define lo que realmente quieres hacer y le buscamos solución... Saludos!

Responder
avatar
Dick
AUTOR
27 de diciembre de 2011, 19:42 delete

Claro eso de insertar un jcombobox dentro de otro lo vi sino me equivoco era modificando el render del combo, pero como dice carlos de que te serviria cual es el objetivo que tu quieras colocarlo dentro. bueno en todo caso puedes encontrarlo en http://temariojava.blogspot.com/

Responder
avatar
Anónimo
AUTOR
12 de abril de 2012, 1:17 delete

Ola una duda como lleno varios combobox desde mysql con diferentes campos cada uno

Responder
avatar
12 de abril de 2012, 19:59 delete

Bueno, basicamente es lo mismo, puedes hacerlo de varias formas, pero una de las mas optimas es que crees 1 solo método que pase por parametro el combo y luego lo llamas con los campos, algo así:

public void llenar_combo(JcomboBox MiComboBox, String ConsultaSQL){
ResultSet resultado = stat.executeQuery(ConsultaSQL);
while (resultado.next()){
MiComboBox.addItem (resultado.getObject("mi_campo"));
}
}

Y lo llamas haciendo algo así:
llenar_combo (combo1, "SELECT * FROM tabla1");
llenar_combo (combo2, "SELECT * FROM tabla2");

Y así hasta llenar los que necesites, Saludos!

Responder
avatar
28 de julio de 2012, 14:45 delete Este comentario ha sido eliminado por el autor.
avatar
Anónimo
AUTOR
28 de julio de 2012, 14:49 delete

estoy tratando de cargar un combobox dependiendo de lo que el usuario elija del primer combobox pero por ahora solo he podido mostrar un solo registro en el segundo combobox

el primer combobox es el departamento y el segundo municipio


private void cbdepartamentoActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String consulta="";


int posicion;
try {
consulta= "select municipio from ciudades where departamento ='"+cbdepartamento.getSelectedItem()+"'";
ResultSet r=sentencia.executeQuery(consulta);
if (!r.first()){
// Si no se puede ubicar en el primer resultado, significa que no se encontró ningún registro
JOptionPane.showMessageDialog(null, "No se encontro el usuario con esa cédula...");

}else{

posicion=cbdepartamento.getSelectedIndex();

switch(posicion){
case 0:
cbmunicipio.addItem (r.getObject("municipio"));
break;
case 1:
cbmunicipio.addItem (r.getObject("municipio"));
break;
default:

}
r.close();
}
}catch (Exception e){
JOptionPane.showMessageDialog(null, e);
}

}

Responder
avatar
Anónimo
AUTOR
28 de julio de 2012, 20:11 delete

bueno despues de tanto intentar y romperme el coco pude lograr algo , les dejo el codigo para ver si a alguien le sirve o incluso lo corrige, y me manda un mensaje para mejorarlo, estos jcombobox son relacionados, y con el ejemplo aqui espuesto logre que al momento de que el usuario seleccione un departamento se cargue el otro jcombobox con los municipios, en mi base de datos tengo una tabla departamento y otra ciudades, en esta ultima estan departamento y ciudades; esto fue lo que pude lograr y me sirve para lo que lo necesito:

este evento esta en el jframe el cual carga el primer jcombobox
private void formWindowActivated(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
String consulta="";


try {
consulta= "select departamento from departamento";
ResultSet r=sentencia.executeQuery(consulta);
while (r.next()){

cbdepartamento.addItem(r.getObject("departamento"));


}
}catch (Exception e){
JOptionPane.showMessageDialog(null, e);
}
}

Responder
avatar
Anónimo
AUTOR
28 de julio de 2012, 20:13 delete

esto es para llenar el otro combobox
private void cbdepartamentoActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String consulta="";
int posicion;

try {
consulta= "select municipio from ciudades where departamento='"+cbdepartamento.getSelectedItem()+"'";
ResultSet r=sentencia.executeQuery(consulta);
while (r.next()){

posicion=cbdepartamento.getSelectedIndex();

switch(posicion){
case 1:
cbmunicipio.addItem (r.getObject("municipio"));
break;
case 2:
cbmunicipio.addItem (r.getObject("municipio"));
break;
case 3:
cbmunicipio.addItem (r.getObject("municipio"));
break;

default:

}

}
}catch (Exception e){
JOptionPane.showMessageDialog(null, e);
}


}
la dificulatad que se me presento fue la siguiente para los case, ya que al seleccionar el otro departamento quedaban los otros municipios que no corresponde a ese departamento y se me ocurrio colocar un boton para realizar cbmunicipio.removeAllItems();
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
cbmunicipio.removeAllItems();
}
espero a alguien le sirvaaa
son mas pero lo r¿simplifique porque la web no soporta 4 mil y mas caracteres

Responder
avatar
30 de julio de 2012, 7:36 delete

Hay una forma mas fácil y práctica, disculpa la tardanza pero sucede que no estoy disponible los fines de semana..... Te invito a revisar la nueva entrada para que veas como hacerlo rápido y sencillo... Saludos!!

Responder
avatar
Anónimo
AUTOR
7 de agosto de 2012, 19:02 delete

aqui hay un ejemplo mas facil y bien entendido: http://www.youtube.com/watch?v=j5D8d6iVUv0&feature=related

Responder
avatar
7 de agosto de 2012, 19:28 delete

Eso es utilizando un IDE (Netbeans) así que de lógica (y obviamente ¬¬) es más fácil.... En Netbeans no tienes que crear el elemento a mano, solo tienes que arrastrarlo, colocar el código en los eventos haciendo unos simples clicks, copiar y pegar.... Todos los ejemplos están explicados a mano para que se vea como trabaja cada cosa, ya que si lo haces como en ese video, no verás bien como se crea cada objeto y de donde sale cada variable... Saludos!!

Responder
avatar
Anónimo
AUTOR
25 de agosto de 2012, 7:42 delete

Hola buenas, me podrian ayudar porfavor. Nose si han gastado MW Exel en el Exel hay una especie de JComboBox, que tu le puedes introducir Datos con un intro y se guardan en la (BD) para despues eligirlos en ese mismo JComboBox. Gracias :)

Responder
avatar
25 de agosto de 2012, 9:54 delete

Hola, en excel no existe ningún JComponent, por lo que es solo un BomboBox, no un JComboBox. Y no solo dispones el combo, sino tambien de una lista (ListBox), aquí no se tocan ese tipo de temas ya que no tiene que ver con el tipo de programación que aquí se explico (bajo un lenguaje específico), sin embargo aquí puedes encontrar lo referente para trabajar lo que necesitas, saludos..!!

Enlace: http://support.microsoft.com/kb/161598/es

Responder
avatar
Anónimo
AUTOR
27 de agosto de 2012, 3:41 delete

Lo del exel era solo una referencia ya que pense que asi es mas facil que me entendieran, yo lo nesesito en java. Saben algo ? Gracias.

Responder
avatar
27 de agosto de 2012, 8:42 delete

En ese caso solo tienes que indicarle que será editable, así:

comboBox.setEditable(true);

Luego en el listener capturas cuando se presione "enter" y le haces un "add" con lo que este escrito:

comboBox.addItem(comboBox.getSelectedItem());

O en vez de esto, puedes hacer el insert, borrar el contenido de combo y volver a cargar cada uno de los elementos, todo depende de como lo quieras hacer.

Responder
avatar
27 de agosto de 2012, 10:20 delete

a qui en una de las entras encuentras un buen ejemplo,si quieres manda un correo y te mando un ejemplo

Responder
avatar
Anónimo
AUTOR
28 de agosto de 2012, 4:52 delete

infernal47@hotmail.com
Me sale un problema con el comboBox.addItem(comboBox.getSelectedItem());
el caso es que en el comboBox me lo repite 4 veses si le agrego algo o lo que ya estaba agregado.

Responder
avatar
Anónimo
AUTOR
28 de agosto de 2012, 5:27 delete


package tema6;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

class ComboBoxActionListener extends JFrame {
public ComboBoxActionListener() {
initialize();
}

private void initialize() {
setSize(300, 300);
setLayout(new FlowLayout(FlowLayout.LEFT));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

String[] names = new String[]{
"James", "Joshua", "Matt", "John", "Paul"
};
JComboBox comboBox = new JComboBox(names);
comboBox.setEditable(true);

comboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {

JComboBox comboBox = (JComboBox) event.getSource();

Object selected = comboBox.getSelectedItem();
System.out.println("Seleccionar Item = " + selected);
comboBox.addItem(comboBox.getSelectedItem());


String command = event.getActionCommand();
System.out.println("Action Command = " + command);

if ("comboBoxEdited".equals(command)) {
System.out.println("Usuario escribio " +
"de la caja");
} else if ("comboBoxChanged".equals(command)) {
System.out.println("Usuario selecciono" +
"de la caja");
}
}
});
getContentPane().add(comboBox);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new ComboBoxActionListener().setVisible(true);
}
});
}
}

Nose porque me lo dublica dos veces.

Responder
avatar
28 de agosto de 2012, 13:33 delete

El error es simple, no estas condicionando, recuerda que el comboBox te dispara 2 eventos en el action, el "edited" y el "changed", tienes que condicionarlo y así te agregará un solo registro, para ello reemplaza esta línea:

comboBox.addItem(comboBox.getSelectedItem());

Por esta:

if (event.getActionCommand().equals("comboBoxEdited")) {
comboBox.addItem(comboBox.getSelectedItem());
}

Prueba y comenta, saludos!!

Responder
avatar
Anónimo
AUTOR
29 de agosto de 2012, 4:45 delete

Funcionaa y ya lo entendi, muchisimas gracias :) una duda mas y pido perdon por molestaros tanto.

Tengo el JcomboBox y debajo un JTextArea. El problema es que cuando despliego el JcomboBox visualmente es como si estuviese debajo de JtextArea.
No lo entiendo porque los 2 estan en un BoxLayout.

Muchas gracias y Saludos !!

Responder
avatar
29 de agosto de 2012, 10:07 delete

Sin problemas, para eso estamos... Veamos tu código, postealo para ver que sucede en ese caso, pero si está dentro del Layout entonces no debería pasar nada de eso.

Responder
avatar
Anónimo
AUTOR
30 de agosto de 2012, 4:40 delete

Gracias. Te lo he enviado a tu direccion de correo electronico ya hay bastante.

Responder
avatar
Anónimo
AUTOR
22 de noviembre de 2012, 22:10 delete

Hola. Saludos. Tengo el siguiente codigo:
private void cargarlista() throws SQLException {
// TODO Auto-generated method stub
Connection conn = null;
String sql = null;
ResultSet rs = null;
Statement st = null;
try {
Class.forName("org.hsqldb.jdbcDriver" );
conn = DriverManager.getConnection("jdbc:hsqldb:file:/home/bladimir/Pacientes/Pacientes", "bladimir", "2704");
st = conn.createStatement();
rs = st.executeQuery ("select nombre from pacientes");
while(rs.next()){
choice1.addItem(rs.getObject("nombre"));
}
} catch (Exception e) {
System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
e.printStackTrace();
return;
}
}
El asunto es que al ejecutarlo no se llena el JCombobox llamado choice1. El ide me resalta el choice1.additem y me dice que el metodo no es aplicable al argumento objeto. Mi correo es cardiobeta@gmail.com. Gracias.

Responder
avatar
22 de noviembre de 2012, 23:31 delete

Primero verifica que la conexión con la BD este correcta mostrando por pantalla la variable "st", luego si todo esta bien, entonces el problema debe ser el JComboBox, revisa que tengas acceso a él mediante el método, si es del tipo estático, si es privado o publico, todo depende.... En todo caso para efectos de pruebas, justo luego del "addItem" agrega:

System.out.println(rs.getObject("nombre"));

Prueba y comenta como te fue... Saludos!!

Responder
avatar
Jhonatan
AUTOR
4 de junio de 2013, 1:21 delete

Muchas gracias, exceptuando la parte de "no uses IE", ya que como usuario puedo usar el navegador que desee, me ha ayudado mucho el código.

Responder
avatar
alexx182
AUTOR
28 de octubre de 2013, 2:44 delete

Hola tengo una duda
donde coloco esto:

ComboBox.addItem (
VARIABLE_ResultSet.getObject("Tipo"));

saludos

Responder
avatar
30 de octubre de 2013, 5:06 delete

Si terminas de leer la entrada verás que eso es a modo de ejemplo, y mas abajo se utiliza en el código completo, saludos!!!

Responder
avatar
8 de noviembre de 2013, 21:47 delete

Hola que tal al llenar el JCombobox y recargar mi pagina con this.dispose se duplican los Items del Combo para evitar la duplicación e intentado vaciar antes del disose() con MiCombo.removeAllItems(); pero no funciona como puedo solucionarlo gracias

Responder
avatar
9 de noviembre de 2013, 12:28 delete

Recuerda que el método "dispose" es para destruir el objeto, sacarlo de la RAM virtual, te recomiendo que si utilizas mucho esa ventana lo trates con "setVisible", puesto que así siempre tendrás el objeto cargado en memoria, ahora con lo que pides el método esta bien, a de ser una llamada que esta en otro orden o algo de tu código que limpia y luego carga de nuevo..... Postea algo de el para ver que sucede.... Saludos!!!

Responder
avatar
alexx182
AUTOR
9 de noviembre de 2013, 17:05 delete

Hola
tengo este codigo:

try{
sentencia=con.createStatement();
rs=sentencia.executeQuery("select perro.nombre,upper(perro.id_perro),upper(raza.nombre_de_raza),upper(perro.peso),upper(perro.fecha_nac) from perro, raza where raza.id_raza=perro.id_raza and nombre='"+txtnombre.getText()+"'");
if(rs.next()){
txtnombre.setText(rs.getString("perro.nombre"));
txtid.setText(rs.getString("upper(perro.id_perro)"));
// this.comboraza.setSelectedItem("upper(raza.nombre_de_raza)");
//comboraza.setSelectedItem("upper(raza.nombre_de_raza)");

txtpeso.setText(rs.getString("upper(perro.peso)"));
txtfecha.setText(rs.getString("upper(perro.fecha_nac)"));


btnbuscar.setEnabled(true);
sentencia.close();
}


es de un boton buscar y quiero que me cargue los datos del nombre de la raza a la que pertenece el perro en el combobox
que debo colocar en esta parte //comboraza.setSelectedItem("upper(raza.nombre_de_raza)"); ???

saludos

Responder
avatar
12 de noviembre de 2013, 8:18 delete

Esto necesitas combinarlo con esto: http://carlitoxenlaweb.blogspot.com/2012/07/cargar-jcombobox-partir-de-otro.html

También te recomiendo mejorar tu sentencia SQL, prueba utilizando "AS" luego de cada campo seleccionado, así tendrás algo más estructurado y simple de leer... Saludos!!!

Responder
avatar
Unknown
AUTOR
1 de septiembre de 2015, 1:13 delete

Gracias por el ejemplo, muy completo y entendible, te felicito y sigue con estos post, pues a mi me interesan mucho. Saludos!!!

Responder
avatar
javier
AUTOR
1 de junio de 2016, 14:47 delete

Gracias amigo me funcionó a la perfección :)

Responder
avatar

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión