martes, 16 de diciembre de 2014

Ejemplo: JavaSE, aplicación MVC - VII

Hola Jabatos:

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...

Anterior tema                                                                                         Siguiente tema

No hay comentarios:

Publicar un comentario