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.
Recibe notificaciones por correo
45 Comentarios
Escribir Comentariogracias por el codigo, pero tengo una consulta.
Respondermira 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
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)...
ResponderSi no es así seria bueno que me muestres parte del código para ayudarte mejor.
me gustaria saber como seria con sql 2005
ResponderHola 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.
ResponderEn 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! :)
hola como estan, quisiera saber
Responderel 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
Mmmmm... Hace tiempo que no uso .NET pero que recuerde el DisplayMember era para hacer una acción despues de seleccionar un ComboBox, ¿cierto?
ResponderEn 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.
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.
ResponderD. 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
Hola, igual que en el comentario anterior puedes hacer un if y else, si combobox1= CargoX entonces id="iDx", por ejemplo:
Responderif (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.
No pues, esa es una forma muy estatica para manejar lo requerido, porque supongo k los cargos pueden seguir aumentando.
ResponderNo 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:
Responderpublic 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!!
me gustaria saber pongo un combobox dentro de otro en java si puedes ayudarme t agrdeceria mucho
ResponderEsto 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!
ResponderClaro 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/
ResponderOla una duda como lleno varios combobox desde mysql con diferentes campos cada uno
ResponderBueno, 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í:
Responderpublic 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!
Gracias! Buenos consejos!
Responderestoy 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
Responderel 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);
}
}
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:
Respondereste 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);
}
}
esto es para llenar el otro combobox
Responderprivate 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
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!!
Responderaqui hay un ejemplo mas facil y bien entendido: http://www.youtube.com/watch?v=j5D8d6iVUv0&feature=related
ResponderEso 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!!
ResponderHola 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 :)
ResponderHola, 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..!!
ResponderEnlace: http://support.microsoft.com/kb/161598/es
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.
ResponderEn ese caso solo tienes que indicarle que será editable, así:
RespondercomboBox.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.
a qui en una de las entras encuentras un buen ejemplo,si quieres manda un correo y te mando un ejemplo
Responderinfernal47@hotmail.com
ResponderMe 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.
Responderpackage 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.
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:
RespondercomboBox.addItem(comboBox.getSelectedItem());
Por esta:
if (event.getActionCommand().equals("comboBoxEdited")) {
comboBox.addItem(comboBox.getSelectedItem());
}
Prueba y comenta, saludos!!
Funcionaa y ya lo entendi, muchisimas gracias :) una duda mas y pido perdon por molestaros tanto.
ResponderTengo 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 !!
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.
ResponderGracias. Te lo he enviado a tu direccion de correo electronico ya hay bastante.
ResponderHola. Saludos. Tengo el siguiente codigo:
Responderprivate 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.
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:
ResponderSystem.out.println(rs.getObject("nombre"));
Prueba y comenta como te fue... Saludos!!
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.
ResponderHola tengo una duda
Responderdonde coloco esto:
ComboBox.addItem (
VARIABLE_ResultSet.getObject("Tipo"));
saludos
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!!!
ResponderHola 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
ResponderRecuerda 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!!!
ResponderHola
Respondertengo 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
Esto necesitas combinarlo con esto: http://carlitoxenlaweb.blogspot.com/2012/07/cargar-jcombobox-partir-de-otro.html
ResponderTambié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!!!
Gracias por el ejemplo, muy completo y entendible, te felicito y sigue con estos post, pues a mi me interesan mucho. Saludos!!!
ResponderGracias amigo me funcionó a la perfección :)
ResponderLamentablemente 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