Java básico 025. Determinar múltiplo entre dos número.

Ejercicio: Pedir dos números y decir si uno es múltiplo del otro.
Código Java
import java.util.Scanner;

/**
*
* @author Ariel
*/

public class Multiplo {

/**
* @param args the command line arguments
*/

public static void main(String[] args) {
int num1, num2;
Scanner num = new Scanner(System.in);
try {
System.out.print("Ingresa el primer número: ");
num1 = num.nextInt();
System.out.print("Ingresa el segundo número: ");
num2 = num.nextInt();
if(num1%num2==0){
System.out.println("El " + num2 + " es multiplo de " + num1);
}
else{
System.out.println("El " + num2 + " no es multiplo de " + num1);
}
} catch (Exception e) {
System.out.println("Error: " + e);
}
}
}

Java básico 024. Área de un Círculo.

Ejercicio: Pedir el radio de un círculo y calcular su área. A=PI*r^2.
Código Java
import java.util.Scanner;

/**
*
* @author Ariel
*/

public class AreaCiculo {

/**
* @param args the command line arguments
*/

public static void main(String[] args) {
double area, radio;
Scanner num = new Scanner(System.in);
try {
System.out.print("Introduce el radio de un Círculo: ");
radio = num.nextDouble();
area = Math.PI*(radio*radio);
System.out.println("El área del Círculo resultante es: " + area);
} catch (Exception e) {
System.out.println("Error: " + e);
}
}
}

Java básico 023. Ordenamiento por Burbuja.

Ordenamiento de un “Array” de enteros utilizando el método de ordenamiento por Burbuja.
Código Java
public class OrdenamientoBurbuja {

/**
* @param args the command line arguments
*/

public static void main(String[] args) {
OrdenamientoBurbuja ordenar = new OrdenamientoBurbuja();
int num[] = {12,48,59,28,36,78,59,48,63,24,11,20,83,16};
ordenar.ordenar(num);
for (int i = 0; i < num.length; i++) {
int j = num[i];
System.out.println(" - " + j);
}
}

public void ordenar(int[] array){
int aux;
boolean cambio = false;
while (true) {
cambio = false;
for (int i = 1; i < array.length; i++) {
if(array[i]<array[i-1]){
aux = array[i];
array[i]=array[i-1];
array[i-1]=aux;
cambio = true;
}
}
if(cambio==false){
break;
}
}
}
}

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

Ejercicio: Crear una aplicación que genere números aleatorios utilizado Random y Thread.
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” 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. También se crea un objeto “Thread” y se implementa sus métodos.
Código Java
public void iniciar(){
cont = true;
Thread t = new Thread( new Runnable() {
@Override
public void run() {
Random ran = new Random();
while(cont){
int nextInt = (int)(ran.nextDouble()*100);
text.setText(String.valueOf(nextInt));
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(PanelRand.class.getName()).log(Level.SEVERE, null, ex);
}
if(cont==false){
break;
}
}

}
});
t.start();

}

public void control(){
cont = false;
}
Utilizamos el evento “ActionPerformed” para llamar los métodos desde los botones en este caso “Iniciar”, “Parar”. 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 iniciarActionPerformed(java.awt.event.ActionEvent evt) {                                        
iniciar();//Evento ActionPerformed botón iniciar.
}

private void pararActionPerformed(java.awt.event.ActionEvent evt) {
control();//Evento ActionPerformed botón parar.
}
En la imagen como queda al ejecutar el JFrame.

Java básico 022. Utilización de “SimpleDateFormat”, Calendar, formato de fecha y hora.

Métodos para obtener fecha, hora y poder convertir al formato “día-mes-año”, “hora-minuto-segundo”. Conversión de objeto Calendar a String, como de String a objeto Calendar.
Código Java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.JOptionPane;

/**
*
* @author Ariel
*/

public class TesFechaHora {

/**
* @param args the command line arguments
*/

public static void main(String[] args) {
TesFechaHora test = new TesFechaHora();
Calendar fecha = Calendar.getInstance();
String retornarString = test.retornarString(fecha);
String retornarStringHora = test.retornarStringHora(fecha);
System.out.println("La fecha es: " +retornarString + " " + "La Hora es: " +retornarStringHora);
}

public String retornarString(Calendar fecha){
String retorno=null;
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
if (fecha != null) {
retorno = sdf.format(fecha.getTime());
}
return retorno;
}

public Calendar retornarCalendar(String fecha){
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
try {
cal.setTime(sdf.parse(fecha));
} catch (ParseException ex) {
JOptionPane.showMessageDialog(null, "Error; compruebe formato de fecha: " + ex);
}
return cal;
}
public String retornarStringHora(Calendar fecha){
String retorno=null;
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
if (fecha != null) {
retorno = sdf.format(fecha.getTime());
}
return retorno;
}

}

Java básico 021. Ordenamiento por inserción.

Ordenamiento de un “Array” de enteros utilizando el método de ordenamiento por inserción.
Código Java
public class OrdenamientoInsercion {

/**
* @param args the command line arguments
*/

public static void main(String[] args) {
OrdenamientoInsercion orden = new OrdenamientoInsercion();
int[] nums = {1,4,9,59,23,26,20,1,23,56,7};
int[] ordenarInsercion = orden.ordenarInsercion(nums);
for (int i = 0; i < ordenarInsercion.length; i++) {
System.out.println(ordenarInsercion[i]);
}
}
public int[] ordenarInsercion(int[] array){
int aux;
for (int i = 1; i < array.length; i++) {
aux = array[i];
for (int j = i-1; j >=0 && array[j]>aux; j--) {
array[j+1]=array[j];
array[j]=aux;
}
}
return array;
}
}

010 - Aplicación de Stock con Java. Hibernate – MySQL – JPA. Formulario transaccional VentaApp.

La primera imagen (img. 01), nos muestra el diseño que tendrán nuestro formulario de Ventas. Indicada en letras rojas, el nombre de variable que le asignamos a cada objeto, esto es importante para ajustarlas los más posible a los métodos que presentaremos más adelante. Se indica cómo cambiar nombre de variables de objetos en los primeros tutoriales.
Obs.: En los primeros tutoriales ya vimos cómo crear formularios y demás.
La segunda imagen (img. 02) nos muestra las importaciones necesarias, los métodos que se ejecutan al arrancar el formulario y las variables de clase necesarias para tener acceso a datos desde cualquier método del formulario.
En forma de código vemos los “Eventos” que utilizaremos y los objetos a los que están encadenados. Utilizamos el evento “ActionPerformed” para llamar los métodos desde los botones. Para los campos de texto utilizamos el evento “KeyPressed”, específicamente se ejecuta la acción al presionar la tecla “Enter” o “Intro”. 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 cancelarActionPerformed(java.awt.event.ActionEvent evt) {
arranque();// Evento ActionPerformed para botón cancelar.
}

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

}

private void idKeyPressed(java.awt.event.KeyEvent evt) {
//Uso del Evento KeyPressed dentro del campo de texto "id".
if(evt.getKeyCode()== KeyEvent.VK_ENTER){
buscarFuncionario();
}
}

private void idClieKeyPressed(java.awt.event.KeyEvent evt) {
//Uso del Evento KeyPressed dentro del campo de texto "idClie".
if(evt.getKeyCode() == KeyEvent.VK_ENTER){
buscarCliente();
}
}

private void idArtKeyPressed(java.awt.event.KeyEvent evt) {
//Uso del Evento KeyPressed dentro del campo de texto "idArt".
if(evt.getKeyCode() == KeyEvent.VK_ENTER){
buscarArticulo();
}
}

private void cantidadKeyPressed(java.awt.event.KeyEvent evt) {
//Uso del Evento KeyPressed dentro del campo de texto "cantidad".
if(evt.getKeyCode() == KeyEvent.VK_ENTER){
calcularParcial();
}
}

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

private void guardarActionPerformed(java.awt.event.ActionEvent evt) {
guardar();// Evento ActionPerformed para botón guardar.
}
Vemos más abajo la lista de métodos que le dan vida al formulario, el nombre de cada método nos da una idea del funcionamiento que cumplen. En los primeros tutoriales indicamos el funcionamiento en profundidad de algunos métodos comunes que se utilizan en un ABM como en transacciones.
Código Java
public void hibernateSession(){
st = HibernateUtil.getSessionFactory().openSession();
}
public void arranque(){
this.nuevo.setEnabled(true);
this.agregar.setEnabled(false);
this.eliminar.setEnabled(false);
this.guardar.setEnabled(false);
this.num.setText(null);
this.fecha.setText(null);
this.hora.setText(null);
this.id.setText(null);
this.id.setEnabled(false);
this.nombres.setText(null);
this.apellidos.setText(null);
this.idClie.setText(null);
this.idClie.setEnabled(false);
this.des.setText(null);
this.idArt.setText(null);
this.idArt.setEnabled(false);
this.desArt.setText(null);
this.pve.setText(null);
this.can.setText(null);
this.cantidad.setText(null);
this.cantidad.setEnabled(false);
this.total.setText(null);
this.totalGeneral.setText(null);
tableModel();
}
public void tableModel(){
this.jTable1.getColumnModel().getColumn(0).setPreferredWidth(15);
this.jTable1.getColumnModel().getColumn(1).setPreferredWidth(150);
this.jTable1.getColumnModel().getColumn(2).setPreferredWidth(80);
this.jTable1.getColumnModel().getColumn(3).setPreferredWidth(50);
this.jTable1.getColumnModel().getColumn(4).setPreferredWidth(80);
model = (DefaultTableModel)this.jTable1.getModel();
model.setNumRows(0);
}
public void nuevo(){
obtenetID();
this.id.setEnabled(true);
this.idClie.setEnabled(true);
this.idArt.setEnabled(true);
this.cantidad.setEnabled(true);
this.agregar.setEnabled(true);
this.eliminar.setEnabled(true);
this.guardar.setEnabled(true);
this.nuevo.setEnabled(false);
this.id.requestFocus();
Calendar cal = Calendar.getInstance();
String calString = retornarString(cal);
String calHora = retornarStringHora(cal);
this.fecha.setText(calString);
this.num.setText(String.valueOf(numVenta));
this.hora.setText(calHora);
}
public void obtenetID(){
numVenta = 0;
List<VentaCab> lista = (List<VentaCab>)st.createQuery("From VentaCab").list();
for (Iterator<VentaCab> it = lista.iterator(); it.hasNext();) {
VentaCab ventaCab = it.next();
numVenta = ventaCab.getNum() + 1;
}
if(numVenta==0){
numVenta=1;
}
}
public void buscarArticulo(){
int idArti = 0;
try {
try {
idArti = Integer.parseInt(this.idArt.getText());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "ID debe ser numérico.");
}
Articulo art = (Articulo)st.load(Articulo.class, idArti);
this.desArt.setText(art.getDes());
this.pve.setText(String.valueOf(art.getPve()));
this.can.setText(String.valueOf(art.getCan()));
this.cantidad.requestFocus();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "No hay artículo con ID: " + idArti);
}
}
public void calcularParcial(){
int canVent = 0;
int pVenta = 0;
int stock = 0;
int totalParcial = 0 ;
try {
canVent = Integer.parseInt(this.cantidad.getText());
pVenta = Integer.parseInt(this.pve.getText());
stock = Integer.parseInt(this.can.getText());
if(stock < canVent){
JOptionPane.showMessageDialog(null, "Stock insuficiente.");
}
else{
totalParcial = canVent * pVenta;
this.total.setText(String.valueOf(totalParcial));
this.agregar.requestFocus();
}

} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Se requiere datos numérico.");
}
}
public void buscarFuncionario(){
int idFunc = 0;
try {
try {
idFunc = Integer.parseInt(this.id.getText());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "ID debe ser numérico.");
}
Funcionario funcio = (Funcionario)st.load(Funcionario.class, idFunc);
this.nombres.setText(funcio.getNombres());
this.apellidos.setText(funcio.getApellidos());
this.idClie.requestFocus();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "No hay funcionario con ID: " + idFunc);
}
}
public void buscarCliente(){
int idCl = 0;
try {
try {
idCl = Integer.parseInt(this.idClie.getText());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "ID debe ser numérico.");
}
Cliente clie = (Cliente)st.load(Cliente.class, idCl);
this.des.setText(clie.getDes());
this.ruc.setText(clie.getRuc());
this.idArt.requestFocus();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "No hay cliente con ID: " + idCl);
}
}
public void agregar(){
if(this.id.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Seleccione un funcionario.");
}
else{
if(this.idClie.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Seleccione un cliente.");
}
else{
if(this.idArt.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Seleccione un articulo.");
}
else{
if(this.cantidad.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Indique una cantidad.");
}
else{
verificar();
if(var>=1){
int showConfirmDialog = JOptionPane.showConfirmDialog(null, "Artículo ya Agregado. Desea sumar la cantidad.", "Mensaje del Sistema.", JOptionPane.YES_NO_OPTION);
if(showConfirmDialog==0){
sumarRepetido();
calcular();
confimAgregar();
limpiar();
}
else{
limpiar();
this.idArt.requestFocus();
}
}
else{
model.addRow(new Object[]{
this.idArt.getText(),this.desArt.getText(),this.pve.getText(),this.cantidad.getText(),this.total.getText()
});
calcular();
confimAgregar();
limpiar();
}

}
}
}
}
}
public void confimAgregar(){
int showConfirmDialog = JOptionPane.showConfirmDialog(null, "Agregar más Articulos.", "Mensaje del Sistema.", JOptionPane.YES_NO_OPTION);
if(showConfirmDialog == 0){
this.idArt.requestFocus();
}
else{
this.guardar.requestFocus();
}

}
public void limpiar(){
this.idArt.setText(null);
this.desArt.setText(null);
this.pve.setText(null);
this.can.setText(null);
this.cantidad.setText(null);
this.total.setText(null);
this.id.setEnabled(false);
this.idClie.setEnabled(false);
}
public void calcular(){
int totalG = 0;
for (int i = 0; i < this.jTable1.getRowCount(); i++) {
Object valueAt = model.getValueAt(i, 4);
totalG += Integer.parseInt(valueAt.toString());
}
this.totalGeneral.setText(String.valueOf(totalG));
}
public void verificar(){
var = 0;
int idAr = Integer.parseInt(this.idArt.getText());
if(this.jTable1.getRowCount()>=1){
for (int i = 0; i < this.jTable1.getRowCount(); i++) {
Object valueAt = model.getValueAt(i, 0);
int parseInt = Integer.parseInt(valueAt.toString());
if(idAr == parseInt){
var = 1;
idArtt = i;
}
}
}
}
public void sumarRepetido(){
int artCant = Integer.parseInt(this.cantidad.getText());
int artTotal = Integer.parseInt(this.total.getText());
Object valueAt = model.getValueAt(idArtt, 3);
Object valueAt1 = model.getValueAt(idArtt, 4);
int cantArt = Integer.parseInt(valueAt.toString());
int totalArt = Integer.parseInt(valueAt1.toString());
int x = artCant + cantArt;
int y = artTotal + totalArt;
int t = Integer.parseInt(this.can.getText());
if(t>=x){
model.setValueAt(x, idArtt, 3);
model.setValueAt(y, idArtt, 4);
}
else{
JOptionPane.showMessageDialog(null, "Stock de artículos insuficiente.");
}

}

public String retornarString(Calendar fecha){
String retorno=null;
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
if (fecha != null) {
retorno = sdf.format(fecha.getTime());
}
return retorno;
}
public String retornarStringHora(Calendar fecha){
String retorno=null;
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
if (fecha != null) {
retorno = sdf.format(fecha.getTime());
}
return retorno;
}
public Calendar retornarCalendar(String fecha){
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
try {
cal.setTime(sdf.parse(fecha));
} catch (ParseException ex) {
JOptionPane.showMessageDialog(null, "Error; compruebe formato de fecha: " + ex);
}
return cal;
}
public void eliminar(){
if(this.jTable1.getSelectedRow()==-1){
JOptionPane.showMessageDialog(null, "No ha seleccionado ninguna fila de la tabla.");
}
else{
int showConfirmDialog = JOptionPane.showConfirmDialog(null, "Eliminar fila seleccionada.", "Mensaje del Sistema.", JOptionPane.YES_NO_OPTION);
if(showConfirmDialog == 0){
int sel = this.jTable1.getSelectedRow();
model.removeRow(sel);
this.idArt.requestFocus();
}
else{
this.idArt.requestFocus();
}
}
}
public void guardar(){
if(this.id.getText().isEmpty() ||this.idClie.getText().isEmpty() ){
JOptionPane.showMessageDialog(null, "Faltan datos para guardar. Verifique.");
}
else{
if(this.jTable1.getRowCount()==0){
JOptionPane.showMessageDialog(null, "No hay datos para guardar.");
}
else{
int showConfirmDialog = JOptionPane.showConfirmDialog(null, "Desea guardar esta venta.", "Mensaje del Sistema.", JOptionPane.YES_NO_OPTION);
if(showConfirmDialog == 0){
try {
st.beginTransaction();
VentaCab venta = new VentaCab();
int idFun = Integer.parseInt(this.id.getText());
int idCli = Integer.parseInt(this.idClie.getText());
long totalVenta = Long.parseLong(this.totalGeneral.getText());
Funcionario funcionario = (Funcionario)st.load(Funcionario.class, idFun);
Cliente cliente = (Cliente)st.load(Cliente.class, idCli);
Calendar fechaVenta = retornarCalendar(this.fecha.getText());
String horaVenta = this.hora.getText();
venta.setCliente(cliente);
venta.setFuncionario(funcionario);
venta.setFecha(fechaVenta);
venta.setHora(horaVenta);
venta.setTotal(totalVenta);
funcionario.getVentaCabs().add(venta);
cliente.getVentaCabs().add(venta);
int rowCount = this.jTable1.getRowCount();
int[] idArti = new int[rowCount];
int[] cantVenta = new int[rowCount];
for (int i = 0; i < this.jTable1.getRowCount(); i++) {
VentaDet detalleVenta = new VentaDet();
int idArticulo = Integer.parseInt(String.valueOf(model.getValueAt(i, 0)));
idArti[i] = idArticulo;
Articulo ventaArticulo = (Articulo)st.load(Articulo.class, idArticulo);
int cantidadVenta = Integer.parseInt(String.valueOf(model.getValueAt(i, 3)));
cantVenta[i]= cantidadVenta;
int importeVenta = Integer.parseInt(String.valueOf(model.getValueAt(i, 4)));
detalleVenta.setArticulo(ventaArticulo);
detalleVenta.setCant(cantidadVenta);
detalleVenta.setImporte(importeVenta);
detalleVenta.setVentaCab(venta);
venta.getVentaDets().add(detalleVenta);
}
st.save(venta);
st.getTransaction().commit();
for (int i = 0; i < idArti.length; i++) {
actualizarStrock(cantVenta[i], idArti[i]);
}
arranque();
JOptionPane.showMessageDialog(null, "Venta guardada correctamente.");
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error guardando venta. Verifique.");
}

}
else{
this.idArt.requestFocus();
}

}
}
}
public void actualizarStrock(int cantidadVendida, int idArticulo){
st.beginTransaction();
Articulo actualizar = (Articulo)st.load(Articulo.class, idArticulo);
int temp = actualizar.getCan() - cantidadVendida;
actualizar.setCan(temp);
st.update(actualizar);
st.getTransaction().commit();
}
En la última imagen vemos el formulario en ejecución. (img. 03)

Java básico 020. Arrays - String, Arrays.sort().

Almacenar información con el uso de Arrays. Uso de Arrays.sort() para realizar ordenamiento.
Código Java
import java.util.Arrays;

/**
*
* @author Ariel
*/

public class ArrayString {

/**
* @param args the command line arguments
*/

public static void main(String[] args) {
String nombre[] ={"Carlos","Luís","Anibal","Lourdes","Sonia","Marcela"
,"Miriam","Pedro","Víctor","Daniel","Elias"};

Arrays.sort(nombre);//Ordenamos el array.
for (int i = 0; i < nombre.length; i++) {
String string = nombre[i];
System.out.println(" - " + string);
}
}
}

Java básico 019. Arrays, Arrays.sort().

Almacenar información con el uso de Arrays. Uso de Arrays.sort().
Código Java
import java.util.Arrays;
import java.util.Scanner;

/**
*
* @author Ariel
*/

public class ArrayNum {

/**
* @param args the command line arguments
*/

public static void main(String[] args) {
int num[] = new int[10];
Scanner numT = new Scanner(System.in);
for (int i = 0; i < num.length; i++) {
System.out.print("Ingrese número. Indice: " + i + ": ");
num[i]=numT.nextInt();
}
System.out.println("Imprimiendo datos.");
for (int i = 0; i < num.length; i++) {
System.out.println("Dato - Indice " + i + ": " + num[i]);
}
System.out.println("Ordenando.");
Arrays.sort(num);
for (int i = 0; i < num.length; i++) {
int j = num[i];
System.out.println("Dato - Indice " + i + ": " + j);
}
}
}

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.

Java básico 018. Control de excepciones, Scanner(System.in).

Ejercicio: Escribir un programa en Java que calcule el área de un rectángulo del cual se le proporcionará por el teclado su altura y base.
Código Java
import java.util.Scanner;

/**
*
* @author Ariel
*/

public class Rectangulo {

/**
* @param args the command line arguments
*/

public static void main(String[] args) {
int base = 0;
int altura = 0;
int area = 0;
Scanner num = new Scanner(System.in);
System.out.println("Calcular el Área de un Rectángulo.");
try {
System.out.print("Ingrese la base del Rectángulo: ");
base = num.nextInt();
System.out.print("Ingrese la altura del Rectángulo: ");
altura = num.nextInt();
area = base * altura;
System.out.println("Resultado.");
System.out.println("El Área resultante es: " + area);
} catch (Exception e) {
System.out.print("ERROR de datos...");
}
}
}

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

Ejercicio: Realizar un pequeño programa que permite la conversión de temperatura entre Fahrenheit y Celsius.
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”, “jCheckBox” 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 celsiusFahrenheit(){
if (this.jCheckBox1.isSelected()) {
this.jCheckBox2.setEnabled(false);
this.fahrenheit.setEnabled(false);
this.fahrenheit.setText(null);
}
else{
this.jCheckBox2.setEnabled(true);
this.fahrenheit.setEnabled(true);
}

}

public void fahrenheitCelsius(){
if (this.jCheckBox2.isSelected()) {
this.jCheckBox1.setEnabled(false);
this.celsius.setEnabled(false);
this.celsius.setText(null);
}
else{
this.jCheckBox1.setEnabled(true);
this.celsius.setEnabled(true);
}

}
public void calcular(){
if(this.jCheckBox1.isSelected()){
if (this.celsius.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "No hay datos...");
}
else{
try {
float celsiusNum = Float.parseFloat(this.celsius.getText());
float fahrenheitNum = ((celsiusNum * 9) / 5) + 32;
this.resultado.setText(String.valueOf(fahrenheitNum + " °F"));

} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Se espera dato numérico...");
}
}

}
if (this.jCheckBox2.isSelected()){
if (this.fahrenheit.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "No hay datos...");
}
else{
try {
float fahrenheitNum = Float.parseFloat(this.fahrenheit.getText());
float celsiusNum = ((fahrenheitNum - 32) * 5) / 9;
this.resultado.setText(String.valueOf(celsiusNum + " °C"));

} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Se espera dato numérico...");
}
}

}
}

public void limpiar(){
this.jCheckBox1.setSelected(false);
this.jCheckBox2.setSelected(false);
this.resultado.setText(null);
this.celsius.setText(null);
this.fahrenheit.setText(null);
this.jCheckBox2.setEnabled(true);
this.fahrenheit.setEnabled(true);
this.jCheckBox1.setEnabled(true);
this.celsius.setEnabled(true);
}
Utilizamos el evento “ActionPerformed” para llamar los métodos desde los botones en este caso “Calcular” y “Limpiar”. Para los jCheckBox también utilizamos el evento “ActionPerformed”. 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 jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {
celsiusFahrenheit();//Evento ActionPerformed para jCheckBox1
}

private void jCheckBox2ActionPerformed(java.awt.event.ActionEvent evt) {
fahrenheitCelsius();//Evento ActionPerformed para jCheckBox2
}

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

private void limpiarActionPerformed(java.awt.event.ActionEvent evt) {
limpiar();//Evento ActionPerformed para botón limpiar
}
En la imagen como queda al ejecutar el JFrame.

Java básico 017. Uso buble for.

Ejercicio: Escribir un programa en Java que lea un número entero desde teclado y realiza la suma de los 100 número siguientes, mostrando el resultado en pantalla.
Código Java
import java.util.Scanner;

/**
*
* @author Ariel
*/

public class SumaDos {

/**
* @param args the command line arguments
*/

public static void main(String[] args) {
int num = 0;
Scanner numero = new Scanner(System.in);
System.out.print("Ingrese el número: ");
num = numero.nextInt();
for (int i = num + 1 ; i < num + 101; i++) {
System.out.println("- " + i);
}
}
}

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

Ejercicio: Obtener nombre, apellido, edad, sexo de varias personas; almacenar en una tabla y procesar los datos y para obtener edad promedio, cantidad de masculinos y femeninos.
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étodo que utilizaremos.
Diseño del formulario utilizando JFrame.
Como elementos utilizamos “Etiquetas”, “Botón”, “combo”, “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. Para añadir valores al combo o “JComboBox” en propiedades “Model” agregamos cada valor separado por comas, estos valores serán estáticos.
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. La declaración “DefaultTableModel model;” nos permite crear una variable de clase para utilizar en cualquier método. Los método llamados en el Constructor se ejecutan al arrancar el formulario, como “setLocationRelativeTo(null)” y “tableModel()”.
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(150);
this.jTable1.getColumnModel().getColumn(1).setPreferredWidth(50);
this.jTable1.getColumnModel().getColumn(2).setPreferredWidth(50);
model = (DefaultTableModel)this.jTable1.getModel();
model.setNumRows(0);
}
public void limpiar(){
tableModel();
this.nom.setText(null);
this.edad.setText(null);
this.sexo.setSelectedIndex(-1);
this.promedioEdad.setText(null);
this.totalF.setText(null);
this.totalM.setText(null);
}
public void agregar(){
if( this.nom.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Indique Nombre y Apellido...");
}
else{
if(this.edad.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Indique la edad...");
}
else{
if(this.sexo.getSelectedIndex() == -1){
JOptionPane.showMessageDialog(null, "Seleccione sexo...");
}
else{
try {
int edadNum = Integer.parseInt(this.edad.getText());
Object selectedItem = this.sexo.getSelectedItem();
String sexoN = selectedItem.toString();
model.addRow(new Object[]{
this.nom.getText(),edadNum,sexoN
});
limpiarAgregar();
procesarDatos();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "ERROR: Verifique datos ingresados..." + e);
}
}
}
}
}
public void limpiarAgregar(){
this.nom.setText(null);
this.edad.setText(null);
this.sexo.setSelectedIndex(-1);
}
public void procesarDatos(){
if(this.jTable1.getRowCount()> 0){
int edadPromedio = 0;
int edadSuma = 0;
int numMasculino = 0;
int numFemenino = 0;
for (int i = 0; i < this.jTable1.getRowCount(); i++) {
Object valueAt = model.getValueAt(i, 1);
int edadT = Integer.parseInt(valueAt.toString());
edadSuma += edadT;
Object valueAt1 = model.getValueAt(i, 2);
if (valueAt1.toString().equals("Masculino")) {
numMasculino += 1;
}
else{
numFemenino += 1;
}
}
edadPromedio = edadSuma / this.jTable1.getRowCount();
this.promedioEdad.setText(String.valueOf(edadPromedio));
this.totalF.setText(String.valueOf(numFemenino));
this.totalM.setText(String.valueOf(numMasculino));
}

}
public void obtenerFila(){
selectedRow = this.jTable1.getSelectedRow();
}
public void eliminarFila(){
if(selectedRow >= 0){
model.removeRow(selectedRow);
procesarDatos();
selectedRow = -1;
}

}
Utilizamos el evento “ActionPerformed” para llamar los métodos desde los botones en este caso “Agregar”, “Eliminar” y “Limpiar”. Para la tabla utilizaremos el evento “Mouse” específicamente “MouseClicked”, que nos permite obtener el número de fina al hacer clic sobre ella y poder utilizar el botón eliminar. 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 agregarActionPerformed(java.awt.event.ActionEvent evt) {                                         
agregar();// Evento para botón agregar
}

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

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

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
obtenerFila();// Evento tipo "MouseClicked" para la JTable1
}
En la imagen como queda al ejecutar el JFrame.

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

El ejercicio es similar a la presentada en el número “006”, con la diferencia del agregado de condiciones específicas.
Ejercicio: Para un salario bruto hasta de $1.500, no hay retención. Para un salario bruto de $1500 a $ 3.000 el porcentaje de retención es de 5%. Para un salario bruto mayor de $3000 el porcentaje de retención es 8%. Obtener el nombre del empleado, el salario bruto, el valor de la retención y el salario neto.
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. La declaración “DefaultTableModel model;” nos permite crear una variable de clase para utilizar en cualquier método. Los método llamados en el Constructor se ejecutan al arrancar el formulario, como “setLocationRelativeTo(null)” y “tableModel()”.
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 calcularSalario(){
String nom;
long salarioBruto = 0;
long salarioNeto = 0;
long retencionSalario = 0;
long salHora = 0;
int retencionPorcentaje = 0;
int horaTrab = 0;
try {
nom = this.nombre.getText();
salHora = Long.parseLong(this.salarioHora.getText());
horaTrab = Integer.parseInt(this.horaTrabajada.getText());
salarioBruto = salHora * horaTrab;

if(salarioBruto < 1500){
retencionSalario = 0;
salarioNeto = salarioBruto;
}
else{
if(salarioBruto >= 1500 && salarioBruto < 3000 ){
retencionPorcentaje = 5;
retencionSalario = (salarioBruto * retencionPorcentaje)/100;
salarioNeto = salarioBruto - retencionSalario;
}
else{
retencionPorcentaje = 8;
retencionSalario = (salarioBruto * retencionPorcentaje)/100;
salarioNeto = salarioBruto - retencionSalario;
}
}
this.retencion.setText(String.valueOf(retencionPorcentaje));
model.setNumRows(0);
model.addRow(new Object[]{
nom,salarioBruto,retencionSalario,salarioNeto
});

} catch (Exception e) {
JOptionPane.showMessageDialog(null, "ERROR: Verifique datos ingresados...");
}
}
public void tableModel(){
this.jTable1.getColumnModel().getColumn(0).setPreferredWidth(100);
this.jTable1.getColumnModel().getColumn(1).setPreferredWidth(50);
this.jTable1.getColumnModel().getColumn(2).setPreferredWidth(50);
this.jTable1.getColumnModel().getColumn(3).setPreferredWidth(50);
model = (DefaultTableModel)this.jTable1.getModel();
model.setNumRows(0);
}
public void limpiar(){
tableModel();
this.nombre.setText(null);
this.salarioHora.setText(null);
this.horaTrabajada.setText(null);
this.retencion.setText(null);
}
Utilizamos el evento “ActionPerformed” para llamar los métodos desde los botones en este caso “Calcular” y “Limpiar”. Para utilizar un “Evento” hacemos clic derecho sobre el objeto y seleccionamos “Eventos” de la lista utilizamos la que podamos aplicar al objeto.
Código Java
    private void calcularActionPerformed(java.awt.event.ActionEvent evt) {                                         
calcularSalario();//Método para botón Calcular...
}

private void limpiarActionPerformed(java.awt.event.ActionEvent evt) {
limpiar();//Método para botón Limpiar...
}
En la imagen como queda al ejecutar el JFrame.