Java - JCOMBOBOX CON OBJETOS

 
Vista:
sin imagen de perfil
Val: 12
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

JCOMBOBOX CON OBJETOS

Publicado por Pablo (5 intervenciones) el 16/12/2020 22:51:29
Hola como estan?
Estoy teniendo problemas con un combobox cargado con objetos. Es bastante extraño lo que ocurre y seguramente debe ser alguna propiedad que debo cambiarle al combobox.
Lleno el combo con objetos de la siguiente forma:

ComboBoxProvincia = new JComboBox(lstProvincias.toArray());

Donde lstProvincias es un arraylist con objetos traidos desde MySql.

El tema es que si bien el codigo esta cargado, porque me fijo e imprimo en pantalla y se ve que tiene los objetos cargados con sus respectiva informacion, pero no muestra el texto en el combo. A simple vista es como que esta vacio.

si yo imprimo lo siguiente:
1
2
System.out.println("Cantidad de provincias en array: " + lstProvincias.toArray().length);
System.out.println("Cantidad de provincias en combo: " + jComboBoxProvincia.getItemCount());

Me muestra como que tienen los objetos bien cargados.

Ya revise el override toString de la entidad, que es de la siguiente forma:
1
2
3
4
@Override
    public String toString() {
        return nombre;
    }

Hace muy poco que volvi a programar en java y lo estoy haciendo con el Netbean

Alguna idea al respecto?

Muchas gracias.
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

JCOMBOBOX CON OBJETOS

Publicado por Mauricio Alarcon (6 intervenciones) el 17/12/2020 02:17:12
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
import java.util.ArrayList;
import javax.swing.JComboBox;
import javax.swing.JFrame;
 
 
public class FirstFrame extends JFrame{
 
    static JComboBox<ArrayList> mycombo;
 
    FirstFrame()
    {
        this.setSize(600,500);
        this.setTitle("My combo");
        this.setLayout(null);
 
        ArrayList<String> names=new ArrayList<String>();
        names.add("jessy");
        names.add("albert");
        names.add("grace");
        mycombo=new JComboBox(names.toArray());
        mycombo.setBounds(60,32,200,50);
        this.add(mycombo);
        this.setVisible(true); // window visible
    }
 
    public static void main(String[] args) {
 
        FirstFrame frame=new FirstFrame();
 
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

JCOMBOBOX CON OBJETOS

Publicado por Pablo (5 intervenciones) el 17/12/2020 13:59:41
Hola Mauricio, muchas gracias por tu aporte. Entiendo lo que me detallas y considero que mi codigo esta bastante parecido. La diferencia mas notoria podria ser que yo al combobox no lo creo de la misma forma que vos, si no que fue agregado como un elemento desde la paleta de objetos ya creados en netbeans.

te paso otra parte del codigo:

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
private void formInternalFrameOpened(javax.swing.event.InternalFrameEvent evt) {
    // TODO add your handling code here:
    List<Localidad> lstLocalidades = new ArrayList<>();
    List<Provincia> lstProvincias = new ArrayList<>();
 
 
    //ProvinciaJpaController dao = new ProvinciaJpaController(emf.createS);
    LocalidadJpaController dao = new LocalidadJpaController(createEntityManagerFactory("GestionEPU"));
    lstLocalidades.addAll(dao.findLocalidadEntities());
 
    DefaultTableModel model = new DefaultTableModel();
    model.addColumn("ID");
    model.addColumn("LOCALIDAD");
    model.addColumn("COD. POSTAL");
    model.addColumn("PROVINCIA");
    for(int i=0;i<lstLocalidades.size();i++){
        model.addRow(new Object[]{lstLocalidades.get(i).getId(),lstLocalidades.get(i).getNombre(),lstLocalidades.get(i).getCodPostal(),lstLocalidades.get(i).getProvincia().getNombre()});
    }
    jTableListaLocalidades.setModel(model);
 
    ProvinciaJpaController daop = new ProvinciaJpaController(createEntityManagerFactory("GestionEPU"));
    lstProvincias.addAll(daop.findProvinciaEntities());
 
    Provincia[] provincias = new Provincia[lstProvincias.toArray().length];
 
    for(int i=0; i<lstProvincias.toArray().length; i++){
        provincias[i] = lstProvincias.get(i);
    }
 
 
 
    jComboBoxProvincia = new JComboBox(lstProvincias.toArray());
    //jComboBoxProvincia.addItem("-- Listado de Provincias --");
    System.out.println("Cantidad de provincias en array: " + lstProvincias.toArray().length);
    System.out.println("Cantidad de provincias en combo: " + jComboBoxProvincia.getItemCount());
 
    //jComboBoxProvincia.addItem();
    //Persona p = (Persona) personasCB.getSelectedItem();
    Provincia p = (Provincia) jComboBoxProvincia.getItemAt(1);
    System.out.println("nombre: " + p);
 
    jComboBox1 = new JComboBox(provincias);
 
}

Hay codigo redundante ya que estaba probando diferentes alternativas.

Asi es como estan declarados los componentes en la funcion initComponetns() que crea de manera automatica netbeasn:

1
2
3
4
5
6
7
8
9
10
11
12
13
jLabel1 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jTableListaLocalidades = new javax.swing.JTable();
jComboBoxProvincia = new javax.swing.JComboBox<>();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jTextFieldNombre = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
textFieldCodPostal = new java.awt.TextField();
buttonNuevo = new java.awt.Button();
buttonEditar = new java.awt.Button();
buttonEliminar = new java.awt.Button();
buttonSalir = new java.awt.Button();


Adjunto esta imagen para clarificar mas el tema:
img001
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

JCOMBOBOX CON OBJETOS

Publicado por Jose Mauricio (2 intervenciones) el 17/12/2020 22:55:14
Hola

Me imagino que estas ocupando el ide de netbeans, el cual ya crea todo el código de cada componente.

Si es así en el mismo ide hay una ventana de propiedades en donde puedes colocar que tipo de datos debe de cargar el jcombobox.

0c7e245ff0d5ade45e006a24ba35bdebo

Por otro lado por lo general JCombobox carga el tipo de String.

He echo algo muy rápido y básico a modo de ejemplo(No con entitys).
Este seria mi entity

1
2
3
4
5
6
7
8
9
10
11
12
13
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.nativo.inicio;
 
/**
 *
 * @author cmt
 */
public record Estados(int id,String estado,int habitantes) {
}

Este sería mi controlador.


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
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.nativo.datos;
 
import com.nativo.inicio.Estados;
import java.util.List;
 
/**
 *
 * @author cmt
 */
public class ControladorEstado {
    //Aqui cargo los estados que quiero mostrar en mi combobox
   //Los cargo en una Lista de objetos Estados
   public static List<Estados> obtenerEstados() {
      var list = List.of(new Estados(1, "Edo Mex", 16_000_000),
             new Estados(2, "Michoacan", 4_000_000),
             new Estados(3, "Veracruz", 8_000_000),
             new Estados(4, "Oaxaca", 255_029));
      return list;
   }
}

Y en mi vista muestro los estados.

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.basic.form;
 
import com.nativo.datos.ControladorEstado;
 
/**
 *
 * @author cmt
 */
public class Busqueda extends javax.swing.JFrame {
 
    /**
     * Creates new form Busqueda
     */
    public Busqueda() {
        initComponents();
        carga();
    }
   //Este metodo se encarga de cargar los estados en el combobox
    private void carga() {
       // Creo la lista de estados que vienen desde el controlador
        var lista = ControladorEstado.obtenerEstados();
     //Y despues itero la lista para que con el metodo
    // addItem me muestre lo que solicito
        lista.forEach(e->{jcombox.addItem(e.estado());});
    }
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {
 
        estadosLabel = new javax.swing.JLabel();
        jcombox = new javax.swing.JComboBox<>();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Test");
 
        estadosLabel.setText("Estados:");
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(estadosLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jcombox, javax.swing.GroupLayout.PREFERRED_SIZE, 206, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(121, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(36, 36, 36)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(estadosLabel)
                    .addComponent(jcombox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(242, Short.MAX_VALUE))
        );
 
        setSize(new java.awt.Dimension(416, 339));
        setLocationRelativeTo(null);
    }// </editor-fold>
 
    /**
     * @param args the command line arguments
     */
    public static void main(String... args) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Busqueda.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Busqueda.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Busqueda.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Busqueda.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
 
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(() -> {
            new Busqueda().setVisible(true);
        });
    }
 
    // Variables declaration - do not modify
    private javax.swing.JLabel estadosLabel;
    private javax.swing.JComboBox<String> jcombox;
    // End of variables declaration
}

Quedando así mi formulario basico.

d4ba8126dc0af08dda4ebfb1a85a89eco

Ojala te sea de ayuda.
Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

JCOMBOBOX CON OBJETOS

Publicado por Pablo Germán (5 intervenciones) el 18/12/2020 13:58:49
Hola buenos dias. Analaizare tu respuesta, hare los cambios necesarios y te comento si me funciona.
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

JCOMBOBOX CON OBJETOS

Publicado por Pablo Germán (5 intervenciones) el 18/12/2020 14:24:17
Perfecto estimado, cambié la forma en que cargaba el combobox por esta
lstProvincias.forEach(e->{jComboBoxProvincia.addItem(e);});
y quedo funcionando.

Millones de gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar