llenar un jcombobox usando el método set - get de una clase

Iniciado por jorgecotrinax, 25 Septiembre 2021, 20:15 PM

0 Miembros y 1 Visitante están viendo este tema.

jorgecotrinax

tengo 2 formularios y una clase

en la clase trabajador se ingresa su nombre usado set y get

el formulario 1 ingresa trabajadores usando el método set


en el formulario 2 quiero que en el jcombobox aparezcan los nombres que inserte
en e formulario 1

rub'n

#1
Cita de: jorgecotrinax en 25 Septiembre 2021, 20:15 PM
en el formulario 2 quiero que en el jcombobox aparezcan los nombres que inserte
en e formulario 1

El Formulario uno tienes JTextfields ?

Debes obtener los valores de esos campos de cada uno y luego llenar el JComboBox.


Mira la linea 51 a 71, donde usamos los valores del JTextField para llenar el JComboBox,

* Linea 57, 58, 59 el método getText() contiene el valor de el input o JTextField

Código (java) [Seleccionar]
class Trabajador {
   private String nombre;
   private String apellido;
   private String correo;

   public String getNombre() {
       return nombre;
   }

   public void setNombre(String nombre) {
       this.nombre = nombre;
   }

   public String getApellido() {
       return apellido;
   }

   public void setApellido(String apellido) {
       this.apellido = apellido;
   }

   public String getCorreo() {
       return correo;
   }

   public void setCorreo(String correo) {
       this.correo = correo;
   }

   @Override
   public String toString() {
       final StringBuilder sb = new StringBuilder();
       sb.append(this.nombre);
       return sb.toString();
   }
}


Código (java) [Seleccionar]


/**
* @author rubn
*/
public class FillJComboBoxWithJTextFields extends JFrame {

   private JTextField textField = new JTextField();
   private JTextField textField2 = new JTextField();
   private JTextField textField3 = new JTextField();

   private JLabel labelNombre = new JLabel("Insertar Nombre", SwingConstants.LEFT);
   private JLabel labelApellido = new JLabel("Insertar Apellido", SwingConstants.LEFT);
   private JLabel labelCorreo = new JLabel("Insertar Correo", SwingConstants.LEFT);

   private JComboBox<Trabajador> jComboBox = new JComboBox<>();
   private JButton button = new JButton("Llenar JComboBox");
   private JButton limpiar = new JButton("Limpiar todo");
   private JPanel jPanel = new JPanel();

   public FillJComboBoxWithJTextFields() {
       jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.Y_AXIS));
       super.add(jPanel);
       jPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
       jPanel.add(this.leftJLabel(this.labelNombre));
       jPanel.add(textField);
       jPanel.add(Box.createVerticalStrut(10));
       jPanel.add(this.leftJLabel(this.labelApellido));
       jPanel.add(textField2);
       jPanel.add(Box.createVerticalStrut(10));
       jPanel.add(this.leftJLabel(this.labelCorreo));
       jPanel.add(textField3);
       jPanel.add(Box.createVerticalStrut(10));
       jPanel.add(this.jComboBox);
       jPanel.add(Box.createVerticalStrut(10));

       JPanel jPanelHorizontal = new JPanel();
       jPanelHorizontal.add(this.button);
       jPanelHorizontal.add(this.limpiar);
       jPanel.add(jPanelHorizontal);

       Stream.of(button, limpiar)
               .forEach(buttons -> buttons.setBorderPainted(false));

       super.pack();
       super.setLocationRelativeTo(null);
       super.setVisible(true);
       super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       this.initBehaviour();
   }

   /**
    * * Comportamiento del boton donde se extraen los valores de los JTextField
    * * También listener del botón de limpieza
    */
   private void initBehaviour() {
       this.button.addActionListener((ActionEvent event) -> {
           String nombre = textField.getText().trim();
           String apellido = textField2.getText().trim();
           String correo = textField3.getText().trim();
           if (Stream.of(nombre, apellido, correo)
                   .noneMatch(String::isEmpty)) {
               final Trabajador trabajador = new Trabajador();
               trabajador.setNombre(nombre);
               trabajador.setApellido(apellido);
               trabajador.setCorreo(correo);
               this.jComboBox.addItem(trabajador);
           } else {
               JOptionPane.showMessageDialog(this,"Llenar todos los inputs",
                       "Error", JOptionPane.ERROR_MESSAGE);
           }
       });

       this.limpiar.addActionListener((ActionEvent event) -> {
           this.jComboBox.removeAllItems();
           Stream.of(textField, textField2, textField3)
                   .forEach(text -> {
                       text.setText("");
                   });
       });

   }

   private JPanel leftJLabel(final JLabel jLabel) {
      final JPanel panel = new JPanel(new BorderLayout());
       panel.add(jLabel, BorderLayout.LINE_START);
       return panel;
   }

   public static void main(String[] args) {
       new Thread(FillJComboBoxWithJTextFields::new).start();
   }
}




rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

jorgecotrinax

#2
Amigo eres un crack enserio  ;-) ;-) ;-)

pero lo que busco es esto , perdón por no poner una imagen antes, no sabia como  




guardaré los datos del formulario en el que se encuentra jComboBox , para
hacer otro formulario que me muestre trabajador vendió mas cual vendió menos

-> usado la clase cliente guardare registro de mis clientes

rub'n

#3
Cita de: jorgecotrinax en 27 Septiembre 2021, 21:17 PM
Amigo eres un crack enserio  ;-) ;-) ;-)

pero lo que busco es esto , perdón por no poner una imagen antes, no sabia como  




guardaré los datos del formulario en el que se encuentra jComboBox , para
hacer otro formulario que me muestre trabajador vendió mas cual vendió menos

-> usado la clase cliente guardare registro de mis clientes


Creo que tienes dos JInternalFrame o no? dentro de JFrame...


  • Puedes hacer que cada vez que insertes un trabajador almacenarlos en una Lista de trabajadores (por ejemplo) y pasar esa lista como parametro al otro JInternalFrame.
    ya tienes un boton llamado insertar usalo.
  • Debes hacer un @Override del metodo @ToString() de la clase Trabajador. como te lo puse en el ejemplo, logrando que solo salga el nombre del trabajador en el JComboBox
  • Los JInternaFrame deben hacer composicion de modo que cuando uses el boton insertar, llames a un metodo del JInternalFrame que contiene el JComboBox

Código (java) [Seleccionar]
/**
* @author rubn
*/
public class FillJComboBoxWithJTextFields extends JFrame {

   private JTextField textField = new JTextField();
   private JTextField textField2 = new JTextField();
   private JTextField textField3 = new JTextField();

   private JLabel labelNombre = new JLabel("Agregar Nombre", SwingConstants.LEFT);
   private JLabel labelApellido = new JLabel("Agregar Apellido", SwingConstants.LEFT);
   private JLabel labelCorreo = new JLabel("Agregar Correo", SwingConstants.LEFT);

   private JButton button = new JButton("Insertar");
   private JButton limpiar = new JButton("Limpiar todo");
   private JPanel jPanelFormulario = new JPanel();
   private JInternalFrame jInternalFrame = new JInternalFrame();
   private FrTrabajadores jInternalFrame2 = new FrTrabajadores();
   private final JDesktopPane jDesktopPane = new JDesktopPane();

   public FillJComboBoxWithJTextFields() {
       super.setTitle("Fill JComboBox");

       super.pack();
       super.setSize(650, 420);
       super.setLocationRelativeTo(null);
       super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       super.setVisible(true);

       this.initBehaviour();
       this.configureJInternalFrames();

   }

   private void configureJInternalFrames() {

       jPanelFormulario.setLayout(new BoxLayout(jPanelFormulario, BoxLayout.Y_AXIS));
       jPanelFormulario.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
       jPanelFormulario.add(leftJLabel(this.labelNombre));
       jPanelFormulario.add(textField);
       jPanelFormulario.add(Box.createVerticalStrut(10));
       jPanelFormulario.add(leftJLabel(this.labelApellido));
       jPanelFormulario.add(textField2);
       jPanelFormulario.add(Box.createVerticalStrut(10));
       jPanelFormulario.add(leftJLabel(this.labelCorreo));
       jPanelFormulario.add(textField3);
       jPanelFormulario.add(Box.createVerticalStrut(10));

       JPanel jPanelHorizontal = new JPanel();
       jPanelHorizontal.add(this.button);
       jPanelHorizontal.add(this.limpiar);
       jPanelFormulario.add(jPanelHorizontal);

       Stream.of(button, limpiar)
               .forEach(buttons -> buttons.setBorderPainted(false));

       this.jInternalFrame.add(this.jPanelFormulario);

       jInternalFrame.setSize(new Dimension(300, 250));
       jInternalFrame.setIconifiable(true);
       jInternalFrame.setVisible(true);

       jDesktopPane.add(this.jInternalFrame);
       jDesktopPane.add(this.jInternalFrame2);
       jDesktopPane.setSize(new Dimension(500, 600));
       super.add(jDesktopPane, BorderLayout.CENTER);
   }

   /**
    * * Comportamiento del boton donde se extraen los valores de los JTextField
    * * También listener del botón de limpieza
    */
   private void initBehaviour() {
       this.button.addActionListener((ActionEvent event) -> {

           String nombre = textField.getText().trim();
           String apellido = textField2.getText().trim();
           String correo = textField3.getText().trim();
           if (Stream.of(nombre, apellido, correo)
                   .noneMatch(String::isEmpty)) {
               final Trabajador trabajador = new Trabajador();
               trabajador.setNombre(nombre);
               trabajador.setApellido(apellido);
               trabajador.setCorreo(correo);
               this.jInternalFrame2.getjComboBox().addItem(trabajador);
           } else {
               JOptionPane.showMessageDialog(this, "Llenar todos los inputs",
                       "Error", JOptionPane.ERROR_MESSAGE);
           }

       });

       this.limpiar.addActionListener((ActionEvent event) -> {
           this.jInternalFrame2.getjComboBox().removeAllItems();
           Stream.of(textField, textField2, textField3)
                   .forEach((JTextField jTextField) -> jTextField.setText(""));
       });

   }

   public static JPanel leftJLabel(final JLabel jLabel) {
       final JPanel panel = new JPanel(new BorderLayout());
       panel.add(jLabel, BorderLayout.LINE_START);
       return panel;
   }

   public static void main(String[] args) {
       try {
           UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
       }
       new Thread(FillJComboBoxWithJTextFields::new).start();
   }
}


JInternalFrame de Trabajadores

Código (java) [Seleccionar]
package com.forotest;

import javax.swing.*;
import java.awt.*;

/**
* @author rubn
*/
public class FrTrabajadores extends JInternalFrame {
   private JComboBox<Trabajador> jComboBox = new JComboBox<>();
   private JPanel panel = new JPanel();
   private JLabel jLabel = new JLabel("Trabajadores");

   public FrTrabajadores() {
       panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
       panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
       panel.add(FillJComboBoxWithJTextFields.leftJLabel(this.jLabel));
       panel.add(Box.createVerticalStrut(10));
       panel.add(this.jComboBox);
       super.add(panel);
       super.setIconifiable(true);
       super.setVisible(true);
       super.setBounds(320,0,0,0);
       super.setSize(new Dimension(300,100));
   }

   public JComboBox<Trabajador> getjComboBox() {
       return jComboBox;
   }
}






rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

jorgecotrinax

Es un JInternalFrameForm

Ese es el formulario en el que iingreso los trabajadores ...




-> dejare el zoom abierto : https://utpvirtual.zoom.us/j/89182665033?pwd=eGJIQTdVcFFHWHBlaHR2WU9wdFJaUT09

rub'n

#5
estuve viendo y la idea del @toString() con solo la variable de instancia nombre, no es buena idea.

Es mejor renderizar lo que queramos en el combo, porque si necesitas ese toString en un futuro pues listo.

Código (java) [Seleccionar]
import javax.swing.*;
import java.awt.*;

public class ComboRenderer extends DefaultListCellRenderer {

   @Override
   public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
       if (value instanceof Trabajador) {
           Trabajador trabajador = (Trabajador) value;
           setText(trabajador.getNombre());
       }
       return this;
   }

}


Código (java) [Seleccionar]
jComboBox.setRenderer(new ComboRenderer());

Entonces tu @toString() quedaria normal, y el combo tendria el mismo comportamiento que el anterior pero mejor, mas pulcro asi.

Código (java) [Seleccionar]
@Override
   public String toString() {
       final StringBuilder sb = new StringBuilder("\nTrabajador");
       sb.append("\nnombre='").append(nombre).append("\n");
       sb.append(", apellido='").append(apellido).append("\n");
       sb.append(", correo='").append(correo).append("\n");
       sb.append("]");
       return sb.toString();
   }


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

jorgecotrinax