Vamos a continuar con las clases que componen nuestras vistas. Ahora vamos a diseñar el panel de pestañas donde irán alojadas los dos paneles que, según las especificaciones iniciales, van a mostrar la información personal y profesional:
public class TabbedPrincipal {
public TabbedPrincipal() {
// CONSTRUCTOR
}
/**
* Este método fabrica un JTabbedPane de dos pestañas, mostrando el contenido
* del objeto Usuarios suministrado.
* @param user - Objeto Usuarios, con los datos del usuario.
* @return - JTabbedPane
*/
public JTabbedPane getDataPanel(Usuarios user) {
// simplemente instancia los dos paneles que se integraran en
// las dos pestañas, los añade y devuelve el JTabbedPane
JTabbedPane tab=new JTabbedPane();
PanelPersonal pers=new PanelPersonal();
PanelProfesional prof=new PanelProfesional();
tab.add("Personales",pers.makePanel(user));
tab.add("Profesionales",prof.makePanel(user));
tab.setVisible(true);
return tab;
}
} // ******** END OF CLASS
Esta clase no tiene más misterios. Ahora vamos a crear la clase que implementa el panel de datos profesionales
public class PanelProfesional implements ActionListener {
// paneles auxiliares
private JPanel r1;
private JPanel r2;
private JPanel r3;
private JPanel r4;
// componentes del formulario
private JComboBox<String> sectorField;
private JTextField profField;
private JTextField oldField;
// 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 PanelProfesional() {
// 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(4,1));
r1=new JPanel();
r2=new JPanel();
r3=new JPanel();
r4=new JPanel();
// creamos los componentes del panel 1
r1.setLayout(new GridLayout(1,2));
JLabel sector=new JLabel(" Sector");
sector.setFont(FONT1);
sectorField=new JComboBox<String>();
sectorField.addItem("Industria");
sectorField.addItem("Comercio");
sectorField.addItem("Agricultura");
sectorField.addItem("Servicios");
sectorField.addItem("Otros");
sectorField.setSelectedItem(usuario.getSector());
// añadimos al panel con labels de margenes
r1.add(sector);
r1.add(sectorField);
// creamos los componentes del panel 2
r2.setLayout(new GridLayout(1,2));
JLabel prof=new JLabel(" Profesión");
prof.setFont(FONT1);
profField=new JTextField(usuario.getProfesion());
profField.setBackground(BACKGR0);
profField.setToolTipText("Entre 6 y 20 caracteres");
// añadimos al panel con labels de margenes
r2.add(prof);
r2.add(profField);
// creamos los componentes del panel 3
r3.setLayout(new GridLayout(1,2));
JLabel old=new JLabel(" Antiguedad");
old.setFont(FONT1);
oldField=new JTextField(String.valueOf(usuario.getAntiguedad()));
oldField.setBackground(BACKGR0);
oldField.setToolTipText("4 caracteres (AÑO)");
// añadimos al panel con labels de margenes
r3.add(old);
r3.add(oldField);
// creamos los componentes del panel 4
JButton button1=new JButton("Modificar");
button1.setToolTipText("Pulse para modificar el usuario");
JButton button2=new JButton("Salir");
button2.setToolTipText("Pulse para salir de la aplicación");
// añadimos al panel
r4.add(button1);
r4.add(button2);
// activamos los listeners de los botones
button1.addActionListener(this);
button2.addActionListener(this);
// finalmente, componemos el JPanel para return
// añadiendo los paneles auxiliares y JLabels para separacion
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;
profField.setBackground(BACKGR0);
oldField.setBackground(BACKGR0);
if (profField.getText().trim().length()<6 || profField.getText().trim().length()>20) {
profField.setBackground(BACKGR1);
result=false;
}
if (oldField.getText().trim().length()!=4) {
oldField.setBackground(BACKGR1);
result=false;
} else {
try {
// si no es parseable es que no es un numero
@SuppressWarnings("unused")
int n=Integer.parseInt(oldField.getText().trim());
} catch (NumberFormatException nf) {
oldField.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.setSector(String.valueOf(sectorField.getSelectedItem()));
usuario.setProfesion(profField.getText().trim());
usuario.setAntiguedad(Integer.parseInt(oldField.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("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);
}
}
}
}
He aquí como queda el panel de datos profesionales:
Esta clase tiene 3 métodos: el makePanel() que fabrica un panel con los componentes y la información suministrados; el checkForm() ya de nosotros conocido; y el actionPerformed() necesario para leer los botones y realizar las acciones.
Detalles:
- makePanel confecciona el panel y muestra la información del usuario.
- 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.
- La salida se realiza "controlada" cuando se pulsa el botón salir.
Ya nos queda solo una clase...
No hay comentarios:
Publicar un comentario