Java + Swing 010. Modo diseño en NetBeans. Uso básico de Métodos, Eventos, Control de Excepciones, Conversión de tipo de datos y Tablas.

Ejercicio: Se tiene un conjunto de registros de los empleados de una compañía, cada registro contiene los siguientes datos: número del empleado, nombre del empleado, salario básico por hora, horas trabajadas en el mes, deducciones, Se requiere leer los registros e imprimir un listado con la siguiente información por empleado: número del empleado, nombre del empleado, salario básico por hora, horas trabajadas, deducciones, salario mensual. También se debe calcular e imprimir al final del listado, el total de salarios pagados a todos los empleados y el promedio salarial por empleado.
En el diseño vemos con numeración en rojo el objeto y la referencia del nombre de variable que le damos para adaptarse a los métodos que utilizaremos.
Diseño del formulario utilizando JFrame.
Como elementos utilizamos “Etiquetas”, “Botón”, “Tabla” y “Campos de Texto”.
Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho y “Cambiar nombre de variable…”. Se puede usar la que se ajuste al código de más abajo. Los campos de texto para resultados se puede indicar como deshabilitado, desmarcando “enabled” en “Properties o Propiedades” de modo diseño.
Observación: Tomar en cuenta que hay que utilizar las importaciones “import”, básico para utilizar ciertos métodos y objetos. El “setLocationRelativeTo(null)” sirve para centrar el formulario.
Creamos los métodos siguientes en el apartado “Fuente”. Estos métodos utilizan conversiones de tipos de datos, controles de excepciones y demás para controlar lo mejor posible el resultado.
Código Java
public void tableModel(){
this.jTable1.getColumnModel().getColumn(0).setPreferredWidth(5);
this.jTable1.getColumnModel().getColumn(1).setPreferredWidth(150);
this.jTable1.getColumnModel().getColumn(2).setPreferredWidth(40);
this.jTable1.getColumnModel().getColumn(3).setPreferredWidth(40);
this.jTable1.getColumnModel().getColumn(4).setPreferredWidth(40);
this.jTable1.getColumnModel().getColumn(5).setPreferredWidth(40);
model = (DefaultTableModel)this.jTable1.getModel();
model.setNumRows(0);

}
public void limpiar(){
tableModel();
this.num.setText(null);
this.nombre.setText(null);
this.salarioHora.setText(null);
this.horaMes.setText(null);
this.totalSalarioMes.setText(null);
this.totalSalarioPagados.setText(null);
this.promedioSalarios.setText(null);
this.deduccion.setText(null);
}
public void limpiarNuevo(){
this.num.setText(null);
this.nombre.setText(null);
this.salarioHora.setText(null);
this.horaMes.setText(null);
this.totalSalarioMes.setText(null);
this.deduccion.setText(null);
}
public void nuevo(){
int rowCount = this.jTable1.getRowCount();
this.num.setText(String.valueOf(rowCount + 1));
}
public void agregar(){
if(this.num.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Seleccione botón nuevo.");
}
else{
if(this.nombre.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Indique un nombre.");
}
else{
if(this.salarioHora.getText().isEmpty() && this.horaMes.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Complete datos faltantes.");
}
else{
try {
long salarioHoraT = Long.parseLong(this.salarioHora.getText());
long horaMesT = Long.parseLong(this.horaMes.getText());
long deduccionT;
if(this.deduccion.getText().isEmpty()){
deduccionT = 0;
}
else{
deduccionT = Long.parseLong(this.deduccion.getText());
}
long totalSalarioMesT = (salarioHoraT * horaMesT) - deduccionT;
model.addRow(new Object[]{
this.num.getText(),this.nombre.getText(),salarioHoraT,horaMesT,deduccionT,totalSalarioMesT
});
procesarTabla();
limpiarNuevo();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error: datos incorrectos.");
}
}
}
}
}
public void procesarTabla(){
long totalSalarioP = 0, promedioSalario = 0;
for (int i = 0; i < this.jTable1.getRowCount(); i++) {
Object valueAt = model.getValueAt(i, 5);
long parseLong = Long.parseLong(valueAt.toString());
totalSalarioP += parseLong;
}
promedioSalario = totalSalarioP / this.jTable1.getRowCount();
this.totalSalarioPagados.setText(String.valueOf(totalSalarioP));
this.promedioSalarios.setText(String.valueOf(promedioSalario));
}
public void obtenerSeleccion(){
try {
selected = this.jTable1.getSelectedRow();
} catch (Exception e) {
}

}
public void eliminar(){
try {
model.removeRow(selected);
selected = -1;
procesarTabla();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error: seleccione una fila.");
}
}
Utilizamos el evento “ActionPerformed” para llamar los métodos desde los botones en este caso “Nuevo”, “Eliminar”, “Agregar” y “Limpiar”. Para el jTable utilizamos el evento “MouseClicked”. Para utilizar un “Evento” hacemos clic derecho sobre el objeto y seleccionamos “Eventos” de la lista utilizamos la que podamos aplicar al objeto. En la lista de evento vemos los comentarios especificando a que objetos se aplican.
Código Java
    private void nuevoActionPerformed(java.awt.event.ActionEvent evt) {                                      
nuevo();//Evento ActionPerformed para botón Nuevo
}

private void agregarActionPerformed(java.awt.event.ActionEvent evt) {
agregar();//Evento ActionPerformed para botón Agregar
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
limpiar();//Evento ActionPerformed para botón Limpiar
}

private void eliminarActionPerformed(java.awt.event.ActionEvent evt) {
eliminar();//Evento ActionPerformed para botón Eliminar
}

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
obtenerSeleccion();//Evento MouseClicked para el JTable.
//Este método permite obtener la fila seleccionada.
}
En la imagen como queda al ejecutar el JFrame.

No hay comentarios :

Publicar un comentario