package tutorialJava.examenes.examen20250616.vista; import javax.swing.JPanel; import java.awt.BorderLayout; import javax.swing.JToolBar; import tutorialJava.examenes.examen20250509.controlador.ControladorConcierto; import tutorialJava.examenes.examen20250509.modelo.Concierto; import tutorialJava.examenes.examen20250616.controlador.ControladorEquipo; import tutorialJava.examenes.examen20250616.controlador.ControladorSocio; import tutorialJava.examenes.examen20250616.modelo.Equipo; import tutorialJava.examenes.examen20250616.modelo.Socio; import javax.swing.JButton; import java.awt.GridBagLayout; import javax.swing.JLabel; import javax.swing.JOptionPane; import java.awt.GridBagConstraints; import java.awt.Font; import java.awt.Insets; import javax.swing.JTextField; import javax.swing.JSlider; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.ImageIcon; import java.awt.event.ActionListener; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.awt.event.ActionEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; public class PanelCRUDSocio extends JPanel { private static final long serialVersionUID = 1L; private JTextField jtfNombre; private JTextField jtfApellido1; private JTextField jtfApellido2; private JTextField jtfFechaNacimiento; private JTextField jtfId; private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); JSlider sliderAntiguedad; JLabel lblAntiguedad; JComboBox jcbEquipo; JCheckBox chckActivo; /** * Create the panel. */ public PanelCRUDSocio() { setLayout(new BorderLayout(0, 0)); JToolBar toolBar = new JToolBar(); add(toolBar, BorderLayout.NORTH); JButton btnPrimero = new JButton(""); btnPrimero.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mostrarSocioEnPantalla(ControladorSocio.getPrimero()); } }); btnPrimero.setIcon(new ImageIcon(PanelCRUDSocio.class.getResource("/tutorialJava/capitulo9_AWT_SWING/res/gotostart.png"))); toolBar.add(btnPrimero); JButton btnAnterior = new JButton(""); btnAnterior.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int idSocioActual = Integer.parseInt(jtfId.getText()); mostrarSocioEnPantalla( ControladorSocio.getAnterior(idSocioActual)); } }); btnAnterior.setIcon(new ImageIcon(PanelCRUDSocio.class.getResource("/tutorialJava/capitulo9_AWT_SWING/res/previous.png"))); toolBar.add(btnAnterior); JButton btnSiguiente = new JButton(""); btnSiguiente.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int idSocioActual = Integer.parseInt(jtfId.getText()); mostrarSocioEnPantalla( ControladorSocio.getSiguiente(idSocioActual)); } }); btnSiguiente.setIcon(new ImageIcon(PanelCRUDSocio.class.getResource("/tutorialJava/capitulo9_AWT_SWING/res/next.png"))); toolBar.add(btnSiguiente); JButton btnUltimo = new JButton(""); btnUltimo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mostrarSocioEnPantalla(ControladorSocio.getUltimo()); } }); btnUltimo.setIcon(new ImageIcon(PanelCRUDSocio.class.getResource("/tutorialJava/capitulo9_AWT_SWING/res/gotoend.png"))); toolBar.add(btnUltimo); JButton btnNuevo = new JButton(""); btnNuevo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { nuevo(); } }); btnNuevo.setIcon(new ImageIcon(PanelCRUDSocio.class.getResource("/tutorialJava/capitulo9_AWT_SWING/res/nuevo.png"))); toolBar.add(btnNuevo); JButton btnGuardar = new JButton(""); btnGuardar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { guardar(); } }); btnGuardar.setIcon(new ImageIcon(PanelCRUDSocio.class.getResource("/tutorialJava/capitulo9_AWT_SWING/res/guardar.png"))); toolBar.add(btnGuardar); JButton btnEliminar = new JButton(""); btnEliminar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { eliminar(); } }); btnEliminar.setIcon(new ImageIcon(PanelCRUDSocio.class.getResource("/tutorialJava/capitulo9_AWT_SWING/res/eliminar.png"))); toolBar.add(btnEliminar); JPanel panel = new JPanel(); add(panel, BorderLayout.CENTER); GridBagLayout gbl_panel = new GridBagLayout(); gbl_panel.columnWidths = new int[]{0, 0, 0, 0}; gbl_panel.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; gbl_panel.columnWeights = new double[]{0.0, 1.0, 0.0, Double.MIN_VALUE}; gbl_panel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE}; panel.setLayout(gbl_panel); JLabel lblNewLabel = new JLabel("Gestión de socios"); lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 14)); GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); gbc_lblNewLabel.gridwidth = 3; gbc_lblNewLabel.insets = new Insets(0, 0, 5, 0); gbc_lblNewLabel.gridx = 0; gbc_lblNewLabel.gridy = 0; panel.add(lblNewLabel, gbc_lblNewLabel); JLabel lblNewLabel_8 = new JLabel("Id:"); GridBagConstraints gbc_lblNewLabel_8 = new GridBagConstraints(); gbc_lblNewLabel_8.anchor = GridBagConstraints.EAST; gbc_lblNewLabel_8.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel_8.gridx = 0; gbc_lblNewLabel_8.gridy = 1; panel.add(lblNewLabel_8, gbc_lblNewLabel_8); jtfId = new JTextField(); GridBagConstraints gbc_jtfId = new GridBagConstraints(); gbc_jtfId.insets = new Insets(0, 0, 5, 5); gbc_jtfId.fill = GridBagConstraints.HORIZONTAL; gbc_jtfId.gridx = 1; gbc_jtfId.gridy = 1; panel.add(jtfId, gbc_jtfId); jtfId.setColumns(10); JLabel lblNewLabel_1 = new JLabel("Nombre"); GridBagConstraints gbc_lblNewLabel_1 = new GridBagConstraints(); gbc_lblNewLabel_1.anchor = GridBagConstraints.EAST; gbc_lblNewLabel_1.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel_1.gridx = 0; gbc_lblNewLabel_1.gridy = 2; panel.add(lblNewLabel_1, gbc_lblNewLabel_1); jtfNombre = new JTextField(); GridBagConstraints gbc_jtfNombre = new GridBagConstraints(); gbc_jtfNombre.gridwidth = 2; gbc_jtfNombre.insets = new Insets(0, 0, 5, 0); gbc_jtfNombre.fill = GridBagConstraints.HORIZONTAL; gbc_jtfNombre.gridx = 1; gbc_jtfNombre.gridy = 2; panel.add(jtfNombre, gbc_jtfNombre); jtfNombre.setColumns(10); JLabel lblNewLabel_2 = new JLabel("Primer apellido:"); GridBagConstraints gbc_lblNewLabel_2 = new GridBagConstraints(); gbc_lblNewLabel_2.anchor = GridBagConstraints.EAST; gbc_lblNewLabel_2.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel_2.gridx = 0; gbc_lblNewLabel_2.gridy = 3; panel.add(lblNewLabel_2, gbc_lblNewLabel_2); jtfApellido1 = new JTextField(); GridBagConstraints gbc_jtfApellido1 = new GridBagConstraints(); gbc_jtfApellido1.gridwidth = 2; gbc_jtfApellido1.insets = new Insets(0, 0, 5, 0); gbc_jtfApellido1.fill = GridBagConstraints.HORIZONTAL; gbc_jtfApellido1.gridx = 1; gbc_jtfApellido1.gridy = 3; panel.add(jtfApellido1, gbc_jtfApellido1); jtfApellido1.setColumns(10); JLabel lblNewLabel_3 = new JLabel("Segundo apellido:"); GridBagConstraints gbc_lblNewLabel_3 = new GridBagConstraints(); gbc_lblNewLabel_3.anchor = GridBagConstraints.EAST; gbc_lblNewLabel_3.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel_3.gridx = 0; gbc_lblNewLabel_3.gridy = 4; panel.add(lblNewLabel_3, gbc_lblNewLabel_3); jtfApellido2 = new JTextField(); GridBagConstraints gbc_jtfApellido2 = new GridBagConstraints(); gbc_jtfApellido2.gridwidth = 2; gbc_jtfApellido2.insets = new Insets(0, 0, 5, 0); gbc_jtfApellido2.fill = GridBagConstraints.HORIZONTAL; gbc_jtfApellido2.gridx = 1; gbc_jtfApellido2.gridy = 4; panel.add(jtfApellido2, gbc_jtfApellido2); jtfApellido2.setColumns(10); JLabel lblNewLabel_4 = new JLabel("Fecha de nacimiento:"); GridBagConstraints gbc_lblNewLabel_4 = new GridBagConstraints(); gbc_lblNewLabel_4.anchor = GridBagConstraints.EAST; gbc_lblNewLabel_4.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel_4.gridx = 0; gbc_lblNewLabel_4.gridy = 5; panel.add(lblNewLabel_4, gbc_lblNewLabel_4); jtfFechaNacimiento = new JTextField(); GridBagConstraints gbc_jtfFechaNacimiento = new GridBagConstraints(); gbc_jtfFechaNacimiento.gridwidth = 2; gbc_jtfFechaNacimiento.insets = new Insets(0, 0, 5, 0); gbc_jtfFechaNacimiento.fill = GridBagConstraints.HORIZONTAL; gbc_jtfFechaNacimiento.gridx = 1; gbc_jtfFechaNacimiento.gridy = 5; panel.add(jtfFechaNacimiento, gbc_jtfFechaNacimiento); jtfFechaNacimiento.setColumns(10); JLabel lblNewLabel_5 = new JLabel("Antigüedad (años):"); GridBagConstraints gbc_lblNewLabel_5 = new GridBagConstraints(); gbc_lblNewLabel_5.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel_5.gridx = 0; gbc_lblNewLabel_5.gridy = 6; panel.add(lblNewLabel_5, gbc_lblNewLabel_5); sliderAntiguedad = new JSlider(); sliderAntiguedad.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { if (lblAntiguedad != null) { lblAntiguedad.setText( sliderAntiguedad.getValue() + " años"); } } }); sliderAntiguedad.setMaximum(150); GridBagConstraints gbc_sliderAntiguedad = new GridBagConstraints(); gbc_sliderAntiguedad.fill = GridBagConstraints.HORIZONTAL; gbc_sliderAntiguedad.insets = new Insets(0, 0, 5, 5); gbc_sliderAntiguedad.gridx = 1; gbc_sliderAntiguedad.gridy = 6; panel.add(sliderAntiguedad, gbc_sliderAntiguedad); lblAntiguedad = new JLabel("New label"); GridBagConstraints gbc_lblAntiguedad = new GridBagConstraints(); gbc_lblAntiguedad.insets = new Insets(0, 0, 5, 0); gbc_lblAntiguedad.gridx = 2; gbc_lblAntiguedad.gridy = 6; panel.add(lblAntiguedad, gbc_lblAntiguedad); chckActivo = new JCheckBox("Socio en activo"); GridBagConstraints gbc_chckActivo = new GridBagConstraints(); gbc_chckActivo.anchor = GridBagConstraints.WEST; gbc_chckActivo.insets = new Insets(0, 0, 5, 5); gbc_chckActivo.gridx = 1; gbc_chckActivo.gridy = 7; panel.add(chckActivo, gbc_chckActivo); JLabel lblNewLabel_7 = new JLabel("Equipo:"); GridBagConstraints gbc_lblNewLabel_7 = new GridBagConstraints(); gbc_lblNewLabel_7.anchor = GridBagConstraints.EAST; gbc_lblNewLabel_7.insets = new Insets(0, 0, 0, 5); gbc_lblNewLabel_7.gridx = 0; gbc_lblNewLabel_7.gridy = 8; panel.add(lblNewLabel_7, gbc_lblNewLabel_7); jcbEquipo = new JComboBox(); GridBagConstraints gbc_jcbEquipo = new GridBagConstraints(); gbc_jcbEquipo.gridwidth = 2; gbc_jcbEquipo.fill = GridBagConstraints.HORIZONTAL; gbc_jcbEquipo.gridx = 1; gbc_jcbEquipo.gridy = 8; panel.add(jcbEquipo, gbc_jcbEquipo); cargarEquipos(); mostrarSocioEnPantalla(ControladorSocio.getPrimero()); } /** * */ private void cargarEquipos(){ List lista = ControladorEquipo.findAll(); for (Equipo e : lista) { this.jcbEquipo.addItem(e); } } /** * */ private void mostrarSocioEnPantalla(Socio s) { if (s != null) { this.jtfId.setText("" + s.getId()); this.jtfNombre.setText(s.getNombre()); this.jtfApellido1.setText(s.getApellido1()); this.jtfApellido2.setText(s.getApellido2()); this.jtfFechaNacimiento.setText( sdf.format(s.getFechaNacimiento())); this.sliderAntiguedad.setValue(s.getAntiguedadAnios()); this.chckActivo.setSelected(s.isActivo()); for (int i = 0; i < this.jcbEquipo.getItemCount(); i++) { if (this.jcbEquipo.getItemAt(i).getId() == s.getIdEquipo()) { this.jcbEquipo.setSelectedIndex(i); } } } } /** * * @return */ private Socio getSocioFromDatosDePantalla() { Socio s = new Socio(); s.setId(Integer.parseInt(jtfId.getText())); s.setNombre(jtfNombre.getText()); s.setApellido1(jtfApellido1.getText()); s.setApellido2(jtfApellido2.getText()); try { s.setFechaNacimiento(sdf.parse(jtfFechaNacimiento.getText())); } catch (Exception e) { JOptionPane.showMessageDialog(null, "El formato de la fecha debe ser dd/MM/yyyy"); } s.setAntiguedadAnios(this.sliderAntiguedad.getValue()); s.setActivo(this.chckActivo.isSelected()); Equipo equipoSeleccionado = (Equipo) this.jcbEquipo.getSelectedItem(); s.setIdEquipo(equipoSeleccionado.getId()); return s; } /** * */ private void guardar() { Socio s = getSocioFromDatosDePantalla(); int registrosAfectados = ControladorSocio.guardar(s); if (registrosAfectados == 1) { if (s.getId() == 0) { // Hemos insertado mostrarSocioEnPantalla(ControladorSocio.getUltimo()); } JOptionPane.showMessageDialog(null, "Guardado correctamente"); } else { JOptionPane.showMessageDialog(null, "Algo ha fallado"); } } /** * */ private void nuevo() { this.jtfId.setText("0"); this.jtfNombre.setText(""); this.jtfApellido1.setText(""); this.jtfApellido2.setText(""); this.jtfFechaNacimiento.setText(sdf.format(new Date())); this.sliderAntiguedad.setValue(0); this.chckActivo.setSelected(false); this.jcbEquipo.setSelectedIndex(0); } /** * */ private void eliminar() { String [] opciones ={"Sí","No"}; int eleccion = JOptionPane.showOptionDialog(null, "¿Desea eliminar el socio?","Eliminar socio", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, opciones, "Sí"); if (eleccion != JOptionPane.YES_OPTION) { return; } int idSocio = Integer.parseInt(jtfId.getText()); int registrosAfectados = ControladorSocio.eliminar(idSocio); if (registrosAfectados == 0) { JOptionPane.showMessageDialog(null, "Error al eliminar"); } else if (registrosAfectados == 1) { JOptionPane.showMessageDialog(null, "Eliminado correctamente"); Socio anterior = ControladorSocio.getAnterior(idSocio); // Si elimino correctamente, intento mostrar el anterior if (anterior != null) { mostrarSocioEnPantalla(anterior); } else { // No existe un anterior, intento mostrar el siguiente Socio siguiente = ControladorSocio.getSiguiente(idSocio); if (siguiente != null) { mostrarSocioEnPantalla(siguiente); } else { // No tiene concierto anterior ni siguiente nuevo(); } } } } }