JAVA: Cómo llenar un JComboBox....

Resuelto
Hola a todos

Mi problema es en realidad que tengo que llenar un JComboBox con los valores de una de las columnas de una de mis tablas.

Debería ser bastante sencillo, pero bueno...

Gracias de antemano

16 respuestas

  1. Una vez conectado a la base de datos: estas instrucciones te permitirán rellenar tu combo
    (he probado y funcionó)
    /*------------------------- Método de relleno del jComboBox ---------------------------*/
    void remplir_Jcomb() { String req= "SELECT Nom_Champ1,Nom_Champ2 FROM Nom_Table ORDER BY Nom_Champ1"; Statement stmt; try { stmt = con.createStatement(); ResultSet res = stmt.executeQuery(req); while(res.next()){ jComboName.addItem(res.getString(<índice de la columna>)); /* el nombre del jComboBox es jComboName y <índice de la columna> es el índice de la columna que deseas mostrar en el combobox ,puede tomar uno de los valores 1,2 . . } res.close(); } catch (SQLException e) { e.printStackTrace(); } }
    //Fin remplir_Jcomb()
    14
    1. Gracias Bouassida
      0
  2. ah encontré gracias, funciona

    el código:

    choixfournisseur = new JComboBox ();
    choixfournisseur.setMaximumRowCount(5);
    choixfournisseur.setBounds (550, 120,150,30);
    choixfournisseur.setBackground(Color.WHITE);
    cont.add (choixfournisseur);

    Vector listenom=AccesBD.creerVecteur1Colonne("SELECT distinct Nom from Fournisseur ");
    choixfournisseur.removeAllItems();
    for(int i=0;i<listenom.size();i++)
    choixfournisseur.addItem((String)(listenom.elementAt(i)));
    3
    1. Hola,

      Si miramos la documentación de la clase JComboBox, encontramos como parámetros:
      - a nivel del constructor: nada, un ComboBoxModel, un arreglo de Object o un Vector;
      - a nivel de los métodos: un Object.

      cf: http://java.sun.com/j2se/1.5.0/docs/api/

      Partiendo de ahí, solo tienes que recuperar los datos de tu tabla en una de las formas mencionadas anteriormente y usar ya sea uno de los constructores o el método.

      Hay un excelente tutorial en el sitio de Sun: "Cómo usar Combo Boxes"

      a+

      --
      -- O espíritu de la libertad --
      2
      1. Gracias por estos mensajes, me ha ayudado mucho.
        2
        1. Colaborador
          ¿Entonces, usas un objeto Recordset?

          String query = "SELECT COF_NAME, PRICE FROM COFFEES"; ResultSet rs = stmt.executeQuery(query); JComboBox j = new JComboBox(); while (rs.next()) { rs.getString("NomDeLaColonne"); j.addItem(rs.getFloat("PRICE")); }


          pd: ¡Nunca he trabajado con JComboBox y no recordaba la sintaxis de las consultas! ¡Viva la java doc y el sitio de sun!
          Referencias:
          http://java.sun.com/j2se/1.4.2/docs/api/index.html
          http://java.sun.com/docs/books/tutorial/jdbc/basics/retrieving.html
          --
          Maily
          ¡Ragondin, ve a la esquina!
          1
          1. Hola,
            estoy tratando de llenar un jCombox a partir de una base de datos (servidor MySQL), pero al mostrar la interfaz tengo un bucle infinito y no puedo corregir este error.
            Por favor, ayúdame a resolver este problema (trabajo en NetBeans).
            aquí está el código
            /*
            * Para cambiar esta plantilla, elija Herramientas | Plantillas
            * y abra la plantilla en el editor.
            */

            package asterisk_teste;

            /**
            *
            * @author
            */
            import java.sql.*;
            import java.io.*;
            import java.util.*;
            import java.sql.DriverManager;
            import java.util.logging.Level;
            import java.util.logging.Logger;
            import javax.swing.ComboBoxModel;
            import javax.swing.DefaultListModel;
            import javax.swing.event.ListDataListener;
            public class SQLrequete

            { public static Administrateur ad =new Administrateur();
            public ResultSet rs1 ;

            public SQLrequete() throws SQLException
            {
            try {
            Connection connection;
            BaseDeDonnee basededonnee = new BaseDeDonnee ();
            rs1=basededonnee.rs;

            } catch (ClassNotFoundException ex) {
            Logger.getLogger(SQLrequete.class.getName()).log(Level.SEVERE, null, ex);
            }

            // ad.Terminal.setModel(model);
            // ad.setVisible(true);

            }
            public static void main(String[] args) throws SQLException
            { //SQLrequete teste =new SQLrequete();

            try {
            //Connection connection;
            BaseDeDonnee basededonnee = new BaseDeDonnee ();
            // teste.rs1=basededonnee.rs;
            // teste.model=basededonnee.getListModelFromResultSet(basededonnee.rs);

            } catch (ClassNotFoundException ex) {

            Logger.getLogger(SQLrequete.class.getName()).log(Level.SEVERE, null, ex);
            }

            //teste.ad.Terminal.setModel(model);
            // teste.ad.setVisible(true);

            }

            }
            class BaseDeDonnee
            {
            public Connection connection = null ;
            public ResultSet rs ;
            public Statement stmt;
            public String requete;
            public Administrateur ad =new Administrateur();
            public DefaultListModel model;
            public BaseDeDonnee() throws ClassNotFoundException, SQLException
            { System.out.println("\n+++++++++++++++++++");
            connexion();
            System.out.println("\n++++++++++++++++++++++");
            stmt = connection.createStatement();
            requete = "SELECT * FROM terminal ORDER BY Num ASC LIMIT 0 , 30";
            System.out.println("\n=======================");
            rs=affichage(requete);
            this.getModelFromResultSet(affichage(requete));
            ad.setVisible(true);
            System.out.println("\n====================");
            fin_connexion();
            }

            // Conexión a la base de datos
            public void connexion () throws ClassNotFoundException, SQLException
            {
            try
            {
            // Carga de los controladores SQL
            System.out.println("\n------------------------");
            System.out.println("Conexión al controlador JDBC.");
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            System.out.println("Controlador com.mysql.jdbc.Driver cargado.");
            }
            catch (ClassNotFoundException a)
            {
            System.out.println ("Controlador no encontrado.");
            }
            catch (Exception b)
            {
            System.out.println ("Problema con la carga del controlador JDBC.");
            }

            try
            {
            // Establecimiento de la conexión con la base
            String url1 = "jdbc:mysql://127.0.0.1:3306/Asteriskteste";
            connection = DriverManager.getConnection(url1,"root","bandia007");
            System.out.println("Conexión a la base establecida.");
            System.out.println("------------------------\n");
            }
            catch (SQLException c)
            {
            System.out.println ("Conexión rechazada o base desconocida.");
            }
            catch (Exception d)
            {
            System.out.println ("Problema con la conexión.");
            }
            }
            public ResultSet affichage(String req)
            {
            // ResultSet rs = null;
            int i=1;

            try
            {
            //Ejecución de las consultas
            //requete = "INSERT INTO `Terminal` ( `Terminal_nom` ) VALUES ( 'EGG' )";
            //requete = "SELECT * FROM terminal ORDER BY Num ASC LIMIT 0 , 30";
            rs = stmt.executeQuery(requete);
            // Statement stmt = connection.createStatement() ;
            //String queryString = "INSERT INTO terminal ( Nom ) VALUES ( 'softphone_mouna' )";
            // String nom ="401";
            // String nom1 ="400";
            // String queryString = "select Num from terminal " ;
            // String queryString1 =req;

            //int update = stmt.executeUpdate(queryString);
            //int update1 = stmt.executeUpdate(queryString1);
            System.out.println (rs);
            while (rs.next())
            {
            System.out.println("Nom : " +rs.getString(1));
            System.out.println("Num : " +rs.getString(2));
            System.out.println("State :" +rs.getString(3));
            System.out.println(""+i);
            i++;

            }

            }
            catch (SQLException d)
            { d.getSQLState();
            d.getErrorCode();
            System.out.println ("Problema con la consulta.");
            System.out.println ("Problema con la consulta." +d.getErrorCode()+d.getSQLState());
            }
            return rs;
            }
            public void getModelFromResultSet(ResultSet rs) throws SQLException {
            ComboBoxModel model = new ComboBoxModel() {

            public void setSelectedItem(Object anItem) {

            throw new UnsupportedOperationException("No soportado aún.");
            }

            public Object getSelectedItem() {

            throw new UnsupportedOperationException("No soportado aún.");
            }

            public int getSize() {

            throw new UnsupportedOperationException("No soportado aún.");
            }

            public Object getElementAt(int index) {

            throw new UnsupportedOperationException("No soportado aún.");
            }

            public void addListDataListener(ListDataListener l) {

            throw new UnsupportedOperationException("No soportado aún.");
            }

            public void removeListDataListener(ListDataListener l) {

            throw new UnsupportedOperationException("No soportado aún.");
            }
            };
            while (rs.next()) {
            rs.getString("NomDeLaColonne");
            ad.NumDial.addItem(rs.getString(1));
            }

            }
            public void fin_connexion()
            {
            try
            {
            // Cierre de la conexión
            connection.close();
            System.out.println("\n------------------------");
            System.out.println ("Cierre de conexión.");
            System.out.println("------------------------\n");
            }
            catch (Exception d)
            {
            System.out.println ("Problema con el cierre de conexión.");
            }
            }
            }
            gracias de antemano
            1
            1. Colaborador
              ¡Hola!

              ¿qué tabla? ¿qué columna? ¿de una base de datos? ¿qué base de datos?

              --
              Maily
              ¡Ragondin, ve a la esquina!
              0
              1. La tabla se llama "Proveedor", la columna se llama "Nombre" de la base de datos "BDStock"
                0
                1. Colaborador
                  ¿Qué SGBD?
                  ¿Ya lograste conectarte a tu base de datos? ¿Tienes la librería adecuada?
                  --
                  Maily
                  ¡Ragondin, ve a la esquina!
                  0
              2. sí, sí, estoy conectado a mi base, la creé con Access y codifico en SQL

                es solo para recuperar los valores de la columna y ponerlos en mi JComboBox
                0
                1. Colaborador
                  ¿Estás conectado a tu base de datos con Java? ¿Has utilizado JDBC?
                  --
                  Maily
                  ¡Ragondin, ve a la esquina!
                  0
                  1. ¡Qué terrible este correo electrónico!

                    ¿Qué importa qué tabla? ¿qué columna? ¿de una base de datos? ¿Qué base de datos?

                    Conéctate a la base de datos, a la tabla y a la columna que quieras.
                    con la ayuda de un PrepareStatement.

                    Itera sobre el objeto ResultSet que obtienes y contiene los valores de tu columna.

                    Rellena un objeto Vector con ello.

                    Y crea tu ComboBox. Voilà, eso es todo.
                    Y si quieres hacerlo profesional, utiliza Apache common-dbutils (para el acceso a la base de datos) y Apache commons-beansutils para la creación dinámica de un combo, de una tabla o lo que sea, ya que este último permite crear dinámicamente un bean tomando como parámetro el resultset.
                    0
                    1. ¡Hola!!

                      Si alguien tiene un ejemplo para recuperar los elementos de una columna y ponerlos en una base de datos, que me lo escriba
                      he intentado muchas cosas pero no funciona

                      gracias de antemano
                      0
                  2. Tengo un lisbox y quiero poner sus elementos en una tabla Jtable.
                    0
                    1. Hola,

                      Tras su discusión sobre el jcomboBox, quiero saber cómo llenar un jtable con la selección de un elemento del jcombobox:
                      quiero explicar que tengo dos tablas en la base de datos MySQL: tabla forme (Code_f, Nom_f), tabla Producto (Code_p, Code_f, .......)
                      el combobox se llena con un Nom_f y cuando selecciono el jcomboBox, un jtable debe mostrar el correspondiente a Nom_f

                      ese es mi problema, he intentado con AbstractTableModel pero no funciona, no sé cómo hacerlo, necesito una idea por favor

                      Gracias, cordialmente
                      0
                      1. Hola
                        encuentro un problema con la instrucción de JCombobox y no he encontrado la solución, por favor ayúdame

                        el problema es que tengo un JCombobox que se llena con las bases de datos SQL y quiero que cuando elija una base de datos a partir del JCombobox, la conexión cambie como un parseador de consultas
                        Gracias
                        0