Por fin, la última clase de la capa vista: la que muestra los datos personales dentro del tabbedPane.
public class PanelPersonal implements ActionListener {
// paneles auxiliares
private JPanel r0;
private JPanel r1;
private JPanel r2;
private JPanel r3;
private JPanel r4;
// componentes del formulario
private JTextField nameField;
private JTextField userField;
private JTextField passField;
private JTextField emailField;
// backgrounds del formulario
private final Color BACKGR0=Color.WHITE;
private final Color BACKGR1=Color.RED;
private final Font FONT1=new Font("Arial",Font.BOLD,16);
// objeto usuario
private Usuarios usuario;
public PanelPersonal() {
// CONSTRUCTOR
}
/**
* Este método fabrica un JPanel con los datos profesionales del usuario.
* @param user - Objeto Usuarios, con los datos del usuario.
* @return - JPanel
*/
public JPanel makePanel(Usuarios user) {
usuario=user;
JPanel panel=new JPanel();
panel.setLayout(new GridLayout(5,1));
// los componentes van colocados en tres paneles auxiliares
r0=new JPanel();
r1=new JPanel();
r2=new JPanel();
r3=new JPanel();
r4=new JPanel();
// creamos los componentes del panel 0
r0.setLayout(new GridLayout(1,2));
JLabel name=new JLabel(" Nombre");
name.setFont(FONT1);
nameField=new JTextField(usuario.getNombre());
nameField.setBackground(BACKGR0);
nameField.setToolTipText("Entre 3 y 20 caracteres");
// añadimos al panel con labels de margenes
r0.add(name);
r0.add(nameField);
// creamos los componentes del panel 1
r1.setLayout(new GridLayout(1,2));
JLabel login=new JLabel(" Usuario");
login.setFont(FONT1);
userField=new JTextField(usuario.getLogin());
userField.setBackground(BACKGR0);
userField.setToolTipText("Entre 6 y 20 caracteres");
// añadimos al panel con labels de margenes
r1.add(login);
r1.add(userField);
// creamos los componentes del panel 2
r2.setLayout(new GridLayout(1,2));
JLabel pass=new JLabel(" Contraseña");
pass.setFont(FONT1);
passField=new JTextField(usuario.getPassword());
passField.setBackground(BACKGR0);
passField.setToolTipText("Entre 6 y 20 caracteres");
// añadimos al panel con labels de margenes
r2.add(pass);
r2.add(passField);
// creamos los componentes del panel 3
r3.setLayout(new GridLayout(1,2));
JLabel email=new JLabel(" Email");
email.setFont(FONT1);
emailField=new JTextField(usuario.getEmail());
emailField.setBackground(BACKGR0);
emailField.setToolTipText("Entre 6 y 30 caracteres");
// añadimos al panel con labels de margenes
r3.add(email);
r3.add(emailField);
// creamos los componentes del panel 4
JButton button1=new JButton("Modificar");
button1.setToolTipText("Pulse para modificar el usuario");
JButton button2=new JButton("Borrar");
button2.setToolTipText("Pulse para eliminar el usuario");
JButton button3=new JButton("Salir");
button3.setToolTipText("Pulse para salir de la aplicación");
// añadimos al panel
r4.add(button1);
r4.add(button2);
r4.add(button3);
// activamos los listeners de los botones
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
// finalmente, componemos el JPanel para return
// añadiendo los paneles auxiliares y JLabels para separacion
panel.add(r0);
panel.add(r1);
panel.add(r2);
panel.add(r3);
panel.add(r4);
panel.setBorder(BorderFactory.createRaisedBevelBorder());
panel.setVisible(true);
return panel;
}
/**
* Este método realiza una simple comprobación de los datos del formulario
* @return boolean
*/
private boolean checkForm() {
// inicializamos por comprobacion de formulario
boolean result=true;
nameField.setBackground(BACKGR0);
userField.setBackground(BACKGR0);
passField.setBackground(BACKGR0);
emailField.setBackground(BACKGR0);
if (nameField.getText().trim().length()<3 || nameField.getText().trim().length()>20) {
nameField.setBackground(BACKGR1);
result=false;
}
if (userField.getText().trim().length()<6 || userField.getText().trim().length()>20) {
userField.setBackground(BACKGR1);
result=false;
}
if (passField.getText().trim().length()<6 || passField.getText().trim().length()>20) {
passField.setBackground(BACKGR1);
result=false;
}
if (emailField.getText().trim().length()<6 || emailField.getText().trim().length()>30) {
emailField.setBackground(BACKGR1);
result=false;
}
return result;
}
// Implementacion de las acciones de los JButtons
@Override
public void actionPerformed(ActionEvent e) {
String source=e.getActionCommand();
if (source.equals("Modificar")) {
// Modifica usuario en la aplicacion
if (checkForm()) {
UsuariosDAO userDAO=new UsuariosDAO();
usuario.setNombre(nameField.getText().trim());
usuario.setLogin(userField.getText().trim());
usuario.setPassword(passField.getText().trim());
usuario.setEmail(emailField.getText().trim());
if (userDAO.changeUser(usuario)) {
JOptionPane.showMessageDialog(null, "Usuario modificado correctamente", "Modificación de usuarios", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Error modificando el usuario", "Modificación de usuarios", JOptionPane.ERROR_MESSAGE);
}
} else {
JOptionPane.showMessageDialog(null, "Error en el formulario", "Modificación de usuarios", JOptionPane.ERROR_MESSAGE);
}
}
// salir de la aplicacion
if (source.equals("Borrar")) {
// borrar completamente el usuario
if (JOptionPane.showConfirmDialog(null, "¿Seguro que desea ELIMINAR el usuario?\nLos datos NO PODRAN SER RECUPERADOS", "Eliminar el usuario", JOptionPane.YES_NO_OPTION)==0) {
UsuariosDAO userDAO=new UsuariosDAO();
if (userDAO.deleteUser(usuario.getId())) {
JOptionPane.showMessageDialog(null, "Usuario eliminado correctamente\nAhora la aplicación se cerrará", "Eliminación de usuarios", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
} else {
JOptionPane.showMessageDialog(null, "Error eliminando el usuario", "Eliminación de usuarios", JOptionPane.ERROR_MESSAGE);
}
}
}
// salir de la aplicacion
if (source.equals("Salir")) {
// salir
if (JOptionPane.showConfirmDialog(null, "¿Seguro que desea abandonar la aplicación?", "Salir de la aplicación", JOptionPane.YES_NO_OPTION)==0) {
System.exit(0);
}
}
}
} // *************** END OF CLASS
El panel queda de esta manera, una vez dentro del JFrame --> JTabbedPane:
Como siempre, algunos detalles sobre el código:
Esta clase tiene también tiene 3 métodos, al igual que la anterior: el makePanel() que fabricador del panel; el checkForm() habitual; y el actionPerformed() para el tema de acciones de botones.
Notas:
- makePanel confecciona el panel y muestra la información del usuario. Nada cambia.
- La información se puede modificar. Al modificar, primero chequea el formulario, crea un objeto Usuario y lo graba con el método changeUser() del DAO. Muestra mensajes mediante JOptionPane con el resultado de la operación. Esto es lo mismo que en el panel datos profesionales.
- Se puede borrar el usuario completamente. Al usar un JOptionPane de confirmación, nos aseguramos de que no hay errores pidiendo conformidad. Una vez dada, simplemente usamos el método deleteUser() del DAO, y se saca al usuario del sistema.
- Igualmente que en otras partes, la salida se realiza "controlada" cuando se pulsa el botón salir.
Ya hemos terminado tanto con las clases del paquete views como con las clases del paquete models. Bueno, la verdad es que aún nos quedan algunos retoques en el paquete views porque nos han quedado algunas cosillas que implementar.
Finalmente, nos queda crear la clase principal, la clase que realmente implementa el "negocio" de nuestra aplicación, y que llamaremos con el nombre tan sugerente de "EnterSandMan".
Finalmente, nos queda crear la clase principal, la clase que realmente implementa el "negocio" de nuestra aplicación, y que llamaremos con el nombre tan sugerente de "EnterSandMan".
No hay comentarios:
Publicar un comentario