Desarrollo de CRUD en Java Swing y ObjectDB para Departamentos y Personas

Informática6,54 KB

Implementación de la Clase Principal y Lógica de Interfaz

private final DepartmentDAO deptDAO = new DepartmentDAO();
private final PersonDAO personDAO = new PersonDAO();

private final DefaultListModel<Department> deptModel = new DefaultListModel<>();
private final DefaultListModel<Person> personModel = new DefaultListModel<>();

private final JList<Department> lstDept = new JList<>(deptModel);
private final JList<Person> lstPerson = new JList<>(personModel);

Constructor y Configuración de la Ventana

// Constructor: monta la interfaz y carga datos
public MainFrame() {
super("CRUD ObjectDB – Departamentos & Personas");

JSplitPane split = new JSplitPane(
JSplitPane.HORIZONTAL_SPLIT,
createDeptPanel(), // construye panel departamentos
createPersonPanel() // construye panel personas
);
split.setDividerLocation(250); // posición de la barra central
add(split, BorderLayout.CENTER);

setSize(650, 400);
setLocationRelativeTo(null); // centra la ventana
setDefaultCloseOperation(EXIT_ON_CLOSE);

// Cuando el usuario selecciona un departamento → cargamos sus personas
lstDept.addListSelectionListener(e -> loadPersons());

// Cargar departamentos al iniciar la app
refreshDepartments();
}

Gestión del Panel de Departamentos

private JPanel createDeptPanel() {
JPanel p = new JPanel(new BorderLayout());
p.setBorder(BorderFactory.createTitledBorder("Departamentos"));

p.add(new JScrollPane(lstDept), BorderLayout.CENTER); // lista con scroll

// Botones inferiores
JPanel btns = new JPanel();
JButton bAdd = new JButton("Añadir");
JButton bEdit = new JButton("Editar");
JButton bDel = new JButton("Borrar");
btns.add(bAdd); btns.add(bEdit); btns.add(bDel);
p.add(btns, BorderLayout.SOUTH);

// Eventos de botones
bAdd.addActionListener(e -> addDepartment());
bEdit.addActionListener(e -> editDepartment());
bDel.addActionListener(e -> deleteDepartment());
return p;
}

Operaciones CRUD para Departamentos

private void addDepartment() {
String name = JOptionPane.showInputDialog(this, "Nombre departamento:");
if (name != null && !name.isBlank()) {
deptDAO.save(new Department(name));
refreshDepartments();
}
}

private void editDepartment() {
Department d = lstDept.getSelectedValue();
if (d == null) return;
String name = JOptionPane.showInputDialog(this, "Nuevo nombre:", d.getName());
if (name != null && !name.isBlank()) {
d.setName(name);
deptDAO.save(d);
refreshDepartments();
}
}

private void deleteDepartment() {
Department d = lstDept.getSelectedValue();
if (d == null) return;
if (!d.getStaff().isEmpty()) {
JOptionPane.showMessageDialog(this,
"No se puede borrar: el departamento tiene personas.");
return;
}
if (JOptionPane.showConfirmDialog(this,
"¿Borrar " + d.getName() + "?") == JOptionPane.OK_OPTION) {
deptDAO.delete(d.getId());
refreshDepartments();
}
}

Operaciones CRUD para Personas

private void addPerson() {
Department d = lstDept.getSelectedValue();
if (d == null) {
JOptionPane.showMessageDialog(this,
"Selecciona un departamento primero");
return;
}
Person p = personDialog(new Person("", 18));
if (p != null) {
d.addPerson(p); // enlaza ambos lados en memoria
personDAO.save(p); // persiste la persona con la FK correcta
loadPersons();
}
}

private void editPerson() {
Person p = lstPerson.getSelectedValue();
if (p == null) return;
Person mod = personDialog(p);
if (mod != null) {
personDAO.save(mod);
loadPersons();
}
}

private void deletePerson() {
Person p = lstPerson.getSelectedValue();
if (p == null) return;
if (JOptionPane.showConfirmDialog(this,
"¿Borrar " + p.getName() + "?") == JOptionPane.OK_OPTION) {
Department d = p.getDepartment();
if (d != null) d.removePerson(p); // quita de la lista en memoria
personDAO.delete(p.getId());
loadPersons();
}
}

Diálogos y Actualización de Datos

private Person personDialog(Person p) {
JTextField tfName = new JTextField(p.getName());
JSpinner spAge = new JSpinner(new SpinnerNumberModel(p.getAge(), 0, 120, 1));

JPanel form = new JPanel(new GridLayout(0, 2, 4, 4));
form.add(new JLabel("Nombre:")); form.add(tfName);
form.add(new JLabel("Edad:")); form.add(spAge);

int ok = JOptionPane.showConfirmDialog(this,
form,
(p.getId() == null ? "Nueva" : "Editar") + " persona",
JOptionPane.OK_CANCEL_OPTION);
if (ok != JOptionPane.OK_OPTION) return null;

p.setName(tfName.getText());
p.setAge((Integer) spAge.getValue());
return p;
}

/
private void refreshDepartments() {
deptModel.clear();
deptDAO.findAll().forEach(deptModel::addElement);
if (!deptModel.isEmpty()) lstDept.setSelectedIndex(0);
}

private void loadPersons() {
personModel.clear();
Department d = lstDept.getSelectedValue();
if (d != null) {
List<Person> list = personDAO.findByDepartment(d.getId());
list.forEach(personModel::addElement);
}
}
}

Descargar

PDF Word HTML