- 1. Clase Graphics
- 2. JButton y JLabel
- 3. JTextField
- 4. BorderLayout
- 5. JCheckBox
- 6. JRadioButton
- 7. JComboBox
- 8. JSlider
- 9. JSpinner
- 10. JToggleButton
- 11. JSeparator
- 12. JDialog
- 13. JProgressBar
- 14. JFormateddTextField
- 15. JEditorPane
- 16. JSplitPane
- 17. JTabbedPane
- 18. JDesktopPane
- 19. JToolBar
- 20. JMenubar
- 21. JTable
- 22. JTree
- 23. JFileChooser
Crea una aplicación de Java Swing que realice las siguientes funciones: Ventana Principal: Crea una ventana principal (JFrame) con un título adecuado. Tabla de Datos: Añade un JTable a la ventana principal. La tabla debe contener información sobre estudiantes, con las siguientes columnas: Nombre (String) Edad (int) Carrera (String) Promedio (double) Botones de Interacción: Añade botones debajo de la tabla para: Agregar un nuevo estudiante. Eliminar un estudiante seleccionado. Actualizar la información de un estudiante seleccionado. Formulario de Entrada: Al hacer clic en "Agregar", muestra un cuadro de diálogo con campos de texto para ingresar la información del nuevo estudiante. Al hacer clic en "Actualizar", muestra un cuadro de diálogo con los campos llenos con la información del estudiante seleccionado, permitiendo editarla. Funcionalidad: Implementa la lógica para agregar, eliminar y actualizar los datos en la tabla. Muestra mensajes adecuados (usando JOptionPane) para confirmar acciones como eliminación de un estudiante o error si no hay un estudiante seleccionado.
package jtable;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.MaskFormatter;
public class Ejercicio1 {
public static void main(String[] args) {
MarcoTabla miMarco = new MarcoTabla();
miMarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
miMarco.setVisible(true);
}
}
class MarcoTabla extends JFrame{
public MarcoTabla() {
setBounds(0,0,600,640);
setTitle("UNIVERSIDAD");
setResizable(false);
setLocationRelativeTo(null);
LaminaTabla miLamina = new LaminaTabla();
add(miLamina);
}
}
class LaminaTabla extends JPanel{
private DefaultTableModel model;
public LaminaTabla() {
JPanel panelTitulo =new JPanel();
JLabel etiquetaTitulo =new JLabel("UNIVERSIDAD ONLINE");
etiquetaTitulo.setFont(new Font(Font.SERIF,Font.BOLD,40));
etiquetaTitulo.setAlignmentX(Component.CENTER_ALIGNMENT);
panelTitulo.add(etiquetaTitulo);
JPanel panelTabla =new JPanel();
model = new DefaultTableModel();
JTable tabla=new JTable(model);
model.addColumn("Nombre");
model.addColumn("Edad");
model.addColumn("Carrera");
model.addColumn("Promedio");
tabla.setVisible(true);
JScrollPane scrollPane = new JScrollPane(tabla);
panelTabla.add(scrollPane, BorderLayout.CENTER);
JPanel panelBotones =new JPanel();
JButton agregar =new JButton("Agregar");
JButton eliminar =new JButton("Eliminar");
JButton actualizar =new JButton("Actualizar");
ArrayList<JButton> listaBotones = new ArrayList<JButton>(Arrays.asList(agregar,eliminar,actualizar));
for (JButton boton : listaBotones) {
boton.setFont(new Font(Font.SERIF,Font.BOLD,16));
boton.setAlignmentX(Component.CENTER_ALIGNMENT);
panelBotones.add(boton);
panelBotones.add(Box.createRigidArea(new Dimension(20,0)));
boton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(boton.getText().equals("Agregar")) {
agregarAlumno(model);
}else if(boton.getText().equals("Eliminar")) {
int selectedRow = tabla.getSelectedRow();
if (selectedRow != -1) { // Verificar que haya una fila seleccionada
int confirm = JOptionPane.showConfirmDialog(null, "¿Estás seguro de que deseas eliminar esta fila?", "Confirmar eliminación", JOptionPane.YES_NO_OPTION);
if (confirm == JOptionPane.YES_OPTION) {
model.removeRow(selectedRow);
}
} else {
JOptionPane.showMessageDialog(null, "Por favor, selecciona una fila para eliminar.", "Error", JOptionPane.ERROR_MESSAGE);
}
}else {
int selectedRow = tabla.getSelectedRow();
if (selectedRow != -1) { // Verificar que haya una fila seleccionada
// Obtener los valores actuales de la fila seleccionada
String nombreActual = (String) model.getValueAt(selectedRow, 0);
int edadActual = (int) model.getValueAt(selectedRow, 1);
String carreraActual = (String) model.getValueAt(selectedRow, 2);
double promedioActual = (double) model.getValueAt(selectedRow, 3);
// Crear el diálogo de actualización con los campos prellenados
JDialog dialogoActualizar = new JDialog((JFrame) null, "Actualizar Alumno", true);
dialogoActualizar.setLocationRelativeTo(null);
dialogoActualizar.setResizable(false);
dialogoActualizar.setSize(new Dimension(500, 300));
JPanel panelAlumno = new JPanel();
panelAlumno.setLayout(new BoxLayout(panelAlumno, BoxLayout.Y_AXIS));
JPanel panelNombre = new JPanel();
JLabel etiquetaNombre = new JLabel("Nombre:");
etiquetaNombre.setFont(new Font(Font.SERIF, Font.BOLD, 16));
JTextField campoNombre = new JTextField(nombreActual, 10);
campoNombre.setFont(new Font(Font.SERIF, Font.BOLD, 16));
panelNombre.add(etiquetaNombre);
panelNombre.add(campoNombre);
JPanel panelEdad = new JPanel();
JLabel etiquetaEdad = new JLabel("Edad:");
etiquetaEdad.setFont(new Font(Font.SERIF, Font.BOLD, 16));
JFormattedTextField campoEdad = null;
try {
MaskFormatter mascara = new MaskFormatter("##");
campoEdad = new JFormattedTextField(mascara);
campoEdad.setFont(new Font(Font.SERIF, Font.BOLD, 16));
campoEdad.setValue(edadActual);
} catch (ParseException ex) {
ex.printStackTrace();
}
panelEdad.add(etiquetaEdad);
panelEdad.add(campoEdad);
JPanel panelCarrera = new JPanel();
JLabel etiquetaCarrera = new JLabel("Carrera:");
etiquetaCarrera.setFont(new Font(Font.SERIF, Font.BOLD, 16));
JTextField campoCarrera = new JTextField(carreraActual, 10);
campoCarrera.setFont(new Font(Font.SERIF, Font.BOLD, 16));
panelCarrera.add(etiquetaCarrera);
panelCarrera.add(campoCarrera);
JPanel panelPromedio = new JPanel();
JLabel etiquetaPromedio = new JLabel("Promedio:");
etiquetaPromedio.setFont(new Font(Font.SERIF, Font.BOLD, 16));
JFormattedTextField campoPromedio = null;
try {
MaskFormatter mascaraPromedio = new MaskFormatter("##.##");
campoPromedio = new JFormattedTextField(mascaraPromedio);
campoPromedio.setFont(new Font(Font.SERIF, Font.BOLD, 16));
campoPromedio.setValue(promedioActual);
} catch (ParseException ex) {
ex.printStackTrace();
}
panelPromedio.add(etiquetaPromedio);
panelPromedio.add(campoPromedio);
JPanel panelBotones = new JPanel();
panelBotones.setLayout(new BoxLayout(panelBotones, BoxLayout.X_AXIS));
JButton botonAceptar = new JButton("Aceptar");
botonAceptar.setFont(new Font(Font.SERIF, Font.BOLD, 16));
botonAceptar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
double promedioActual=0;
promedioActual = (double) model.getValueAt(selectedRow, 3);
// Validar y actualizar los datos en la tabla
if (campoNombre.getText().isEmpty() || campoCarrera.getText().isEmpty() || promedioActual==0) {
JOptionPane.showMessageDialog(null, "Todos los campos son obligatorios.", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
double promedio = promedioActual;
if (promedio > 10) {
JOptionPane.showMessageDialog(null, "El promedio no puede ser mayor que 10.", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
int edadActual = (int) model.getValueAt(selectedRow, 1);
// Actualizar los valores en el modelo de la tabla
model.setValueAt(campoNombre.getText(), selectedRow, 0);
model.setValueAt(edadActual,selectedRow, 1);
model.setValueAt(campoCarrera.getText(), selectedRow, 2);
model.setValueAt(promedio, selectedRow, 3);
dialogoActualizar.dispose();
}
});
JButton botonCancelar = new JButton("Cancelar");
botonCancelar.setFont(new Font(Font.SERIF, Font.BOLD, 16));
botonCancelar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialogoActualizar.dispose();
}
});
panelBotones.add(botonAceptar);
panelBotones.add(Box.createRigidArea(new Dimension(10, 0)));
panelBotones.add(botonCancelar);
panelBotones.add(Box.createRigidArea(new Dimension(0, 50)));
panelAlumno.add(panelNombre);
panelAlumno.add(panelEdad);
panelAlumno.add(panelCarrera);
panelAlumno.add(panelPromedio);
panelAlumno.add(panelBotones);
dialogoActualizar.add(panelAlumno);
dialogoActualizar.setVisible(true);
} else {
JOptionPane.showMessageDialog(null, "Por favor, selecciona una fila para actualizar.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
});
}
panelBotones.add(Box.createRigidArea(new Dimension(0,100)));
setLayout(new BorderLayout());
add(panelTitulo,BorderLayout.NORTH);
add(panelTabla,BorderLayout.CENTER);
add(panelBotones,BorderLayout.SOUTH);
}
private void agregarAlumno(DefaultTableModel modelo) {
JDialog dialogoAgregar=new JDialog((JFrame) null, "Agregar Alumno", true);
dialogoAgregar.setLocationRelativeTo(null);
dialogoAgregar.setResizable(false);
dialogoAgregar.setSize(new Dimension(500,300));
JPanel panelAlumno =new JPanel();
panelAlumno.setLayout(new BoxLayout(panelAlumno, BoxLayout.Y_AXIS));
JPanel panelNombre =new JPanel();
JLabel etiquetaNombre =new JLabel("Nombre:");
etiquetaNombre.setFont(new Font(Font.SERIF,Font.BOLD,16));
etiquetaNombre.setAlignmentX(Component.CENTER_ALIGNMENT);
JTextField campoNombre= new JTextField(10);
campoNombre.setFont(new Font(Font.SERIF,Font.BOLD,16));
campoNombre.setAlignmentX(Component.CENTER_ALIGNMENT);
panelNombre.add(etiquetaNombre);
panelNombre.add(campoNombre);
JPanel panelEdad =new JPanel();
JLabel etiquetaEdad =new JLabel("Edad:");
etiquetaEdad.setFont(new Font(Font.SERIF,Font.BOLD,16));
etiquetaEdad.setAlignmentX(Component.CENTER_ALIGNMENT);
JFormattedTextField campoEdad = null;
try {
MaskFormatter mascara = new MaskFormatter("##");
campoEdad = new JFormattedTextField(mascara);
campoEdad.setFont(new Font(Font.SERIF, Font.BOLD, 16));
campoEdad.setAlignmentX(Component.CENTER_ALIGNMENT);
campoEdad.setPreferredSize(new Dimension(100,50));
campoEdad.setHorizontalAlignment(JFormattedTextField.CENTER);
} catch (ParseException e) {
e.printStackTrace();
}
panelEdad.add(etiquetaEdad);
panelEdad.add(campoEdad);
JPanel panelCarrera =new JPanel();
JLabel etiquetaCarrera=new JLabel("Carrera:");
etiquetaCarrera.setFont(new Font(Font.SERIF,Font.BOLD,16));
etiquetaCarrera.setAlignmentX(Component.CENTER_ALIGNMENT);
JTextField campoCarrera= new JTextField(10);
campoCarrera.setFont(new Font(Font.SERIF,Font.BOLD,16));
campoCarrera.setAlignmentX(Component.CENTER_ALIGNMENT);
panelCarrera.add(etiquetaCarrera);
panelCarrera.add(campoCarrera);
JPanel panelPromedio =new JPanel();
JLabel etiquetaPromedio =new JLabel("Promedio:");
etiquetaPromedio.setFont(new Font(Font.SERIF,Font.BOLD,16));
etiquetaPromedio.setAlignmentX(Component.CENTER_ALIGNMENT);
JFormattedTextField campoPromedio = null;
try {
MaskFormatter mascaraPromedio = new MaskFormatter("##.##");
campoPromedio = new JFormattedTextField(mascaraPromedio);
campoPromedio.setFont(new Font(Font.SERIF, Font.BOLD, 16));
campoPromedio.setAlignmentX(Component.CENTER_ALIGNMENT);
campoPromedio.setPreferredSize(new Dimension(100,50));
campoPromedio.setHorizontalAlignment(JFormattedTextField.CENTER);
} catch (ParseException e) {
e.printStackTrace();
}
panelPromedio.add(etiquetaPromedio);
panelPromedio.add(campoPromedio);
JPanel panelBotones =new JPanel();
panelBotones.setLayout(new BoxLayout(panelBotones, BoxLayout.X_AXIS));
JButton botonAceptar= new JButton("Aceptar");
botonAceptar.setFont(new Font(Font.SERIF,Font.BOLD,16));
botonAceptar.setAlignmentX(Component.CENTER_ALIGNMENT);
JButton botonCancelar= new JButton("Cancelar");
botonCancelar.setFont(new Font(Font.SERIF,Font.BOLD,16));
botonCancelar.setAlignmentX(Component.CENTER_ALIGNMENT);
final JFormattedTextField finalCampoEdad = campoEdad;
final JFormattedTextField finalCampoPromedio = campoPromedio;
botonAceptar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane panelControl =new JOptionPane();
if(campoNombre.getText().isEmpty()) {
panelControl.showMessageDialog(null,"El campo nombre no puede quedar vacio","Error nombre",JOptionPane.ERROR_MESSAGE);
return;
}else if(finalCampoEdad.getText().isEmpty()) {
panelControl.showMessageDialog(null,"El campo edad no puede quedar vacio","Error edad",JOptionPane.ERROR_MESSAGE);
return;
}else if(campoCarrera.getText().isEmpty()) {
panelControl.showMessageDialog(null,"El campo carrera no puede quedar vacio","Error carrera",JOptionPane.ERROR_MESSAGE);
return;
}else if(finalCampoPromedio.getText().isEmpty()) {
panelControl.showMessageDialog(null,"El campo promedio no puede quedar vacio","Error promedio",JOptionPane.ERROR_MESSAGE);
return;
}
double promedio=Double.parseDouble(finalCampoPromedio.getText());
if(promedio>10) {
panelControl.showMessageDialog(null,"El campo promedio no puede ser mayor de 10","Error promedio",JOptionPane.ERROR_MESSAGE);
return;
}
String nombre=campoNombre.getText();
int edad=Integer.parseInt(finalCampoEdad.getText());
String carrera=campoCarrera.getText();
model.addRow(new Object[] {nombre,edad,carrera,promedio});
dialogoAgregar.dispose();
}
});
botonCancelar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialogoAgregar.dispose();
}
});
panelBotones.add(botonAceptar);
panelBotones.add(Box.createRigidArea(new Dimension(10,0)));
panelBotones.add(botonCancelar);
panelBotones.add(Box.createRigidArea(new Dimension(0,50)));
panelAlumno.add(panelNombre);
panelAlumno.add(panelEdad);
panelAlumno.add(panelCarrera);
panelAlumno.add(panelPromedio);
panelAlumno.add(panelBotones);
dialogoAgregar.add(panelAlumno);
dialogoAgregar.setVisible(true);
}
}