Uso básico de elementos Swing con NetBeans – 24 – Uso de JPasswordField, campo para contraseña.

En esta guía mostraremos una forma sencilla de usar el campo de contraseña, que es una extensión de la clase campo de textos. Para este ejemplo utilizaremos un JPasswordField para ingresar la contraseña de comprobación y un JTextField con la salida del resultado; un botón con evento para ejecutar el método de comprobación. Para el diseño utilizamos un “JFrame” que nombraremos “UsoJPasswordField”.

Tomar en cuenta los nombres de variable de cada objeto, en el diseño se especifican; es muy importante ya que desde los métodos se utilizan estos nombres para referencia a cada objeto. Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho sobre la misma y clic en “Cambiar nombre de variable…”. (clic sobre la imagen para ampliar)

La única importación necesaria será la siguiente: import java.util.Arrays;

Creamos los métodos siguiente en modo fuente, los métodos creados por nosotros las ubicamos al final de la declaración de variables, justo antes de la llave de cierre general. Se agregan comentario para aclarar la función de cada línea de código.

Código Java
    private void aceptar(){
//Obtenemos el password que es un array de caracteres
//El resultado no es texto en claro sino codificado.
char[] password = jPass.getPassword();
//Usamos nuestro método creado para comprobar
if(esCorrecta(password)){
jTextP.setText("Es Correcta: " + password);
}
else{
jTextP.setText("Contraseña errónea, intenta de nuevo: " + password);
}
//Limpiamos los datos del array.
Arrays.fill(password, '0');
jPass.selectAll();
jPass.requestFocus();

}
//Creamos un método para comprobar la contraseña correcta
private static boolean esCorrecta(char[] p) {
boolean esPass = true;
//Nuestra contraseña de prueba "usuario"
char[] pass = { 'u', 's', 'u', 'a', 'r', 'i', 'o' };
//Comprobamos que la longitud sea igual
if (p.length != pass.length) {
esPass = false;
} else {
//Usamos un comparador para verificar carácter por carácter.
esPass = Arrays.equals(p, pass);
}
//Limpiamos los datos del array.
//Requerimiento de seguridad.
Arrays.fill(pass,'0');
return esPass;
}

Para el botón “Aceptar” utilizamos el evento “ActionPerformed”. Si hay dudas sobre como agregar “Eventos” a objetos, en las primeras guías de la serie vimos con detalle ese punto.

Código Java
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
aceptar();
}

En este punto ya podremos ejecutar nuestro formulario y comprobar su funcionalidad. (Por si hay alguna duda en el proceso, debemos hacer clic derecho sobre nuestro archivo fuente y presionar “ejecutar archivo” ya que nuestro proyecto no tiene una clase principal definida)

Uso básico de elementos Swing con NetBeans – 23 – Uso de JPopupMenu, menú emergente.

En este ejemplo veremos cómo podemos utilizar el JPopupMenu dentro de una tabla, a la vez veremos el uso básico que se le puede dar a esta tabla, pudiendo manejarla utilizando DefaultTableModel, se personalizan las columnas del “JTable” haciendo clic derecho sobre la misma, si el menú es en español dirá “Contenido de tabla”, luego seleccionamos pestaña “columnas” y hacemos las modificaciones, en la imagen del diseño se especifican los detalles. Los campos de texto servirán para obtener datos del usuario y el botón “Agregar” para obtener esos datos y pasarla a la tabla. El JPopupMenu se agrega al formulario tomándola desde la paleta, pero esta se ubica en el área que dice “Otros componentes” como vemos en el diseño más abajo, seguido le podremos añadir los “JMenuItem” que necesitemos; para este ejemplo utilizamos dos que serán “Eliminar” y “Sumar”. Para el diseño del formulario utilizamos JFrame, el nombre del mismo es a criterio de cada uno en esta ocasión. Tomar en cuenta los nombres de variable de cada objeto, en el diseño se especifican; es muy importante ya que desde los métodos se utilizan estos nombres para referencia a cada objeto. Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho sobre la misma y clic en “Cambiar nombre de variable…”. (clic sobre la imagen para ampliar)

Lista de las importaciones que debemos de tener para utilizar ciertos elementos en nuestro formulario. Agregamos algunas líneas de código en el constructo del JFrame que se explican con comentarios.

Código Java
package com.swing.basic;//Paquete de fuentes

import java.awt.event.MouseEvent;
import javax.swing.JOptionPane;//Importaciones
import javax.swing.table.DefaultTableModel;

/**
*
* @author ECS
*/

public class UsoMenu extends javax.swing.JFrame {

/**
* Creates new form UsoMenu
*/

public UsoMenu() {
initComponents();
setLocationRelativeTo(null);//Centrar formulario
tableModel();//Método de inicio
}
private DefaultTableModel model;//Variable de clase

Creamos los métodos siguiente en modo fuente, los métodos creados por nosotros las ubicamos al final de la declaración de variables, justo antes de la llave de cierre general. Se agregan comentario para aclarar la función de cada línea de código.

Código Java
    private void tableModel(){
//DefaultTableModel para trabajar con tablas
table.getColumnModel().getColumn(0).setPreferredWidth(10);
table.getColumnModel().getColumn(1).setPreferredWidth(150);
table.getColumnModel().getColumn(2).setPreferredWidth(150);
table.getColumnModel().getColumn(3).setPreferredWidth(20);
model = (DefaultTableModel)table.getModel();
model.setRowCount(0);
}
private void agregar(){
//El id agregamos desde código
int id = table.getRowCount() + 1;
//Comprobamos que los campos no esten vacios
if(!nombres.getText().isEmpty() && !apellidos.getText().isEmpty() && !edad.getText().isEmpty()){
int ed = 0;
//Si el datos de edad no es númerico se utiliza 0-cero
try {
ed = Integer.parseInt(edad.getText());
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Se requiere dato numérico para edad..." + e);
}
//Se agregan datos a la tabla utilizando addRow
model.addRow(new Object[]{
id, nombres.getText(), apellidos.getText(),ed
});
//Se limpian los campos al agregar datos
limpiar();
}
else{
JOptionPane.showMessageDialog(null, "Faltan datos...");
}
}
//Método para limpiar campos
private void limpiar(){
edad.setText(null);
nombres.setText(null);
apellidos.setText(null);
}
//Método para sumar el número de elementos y suma total de edades
//Se llama desde JPopupMenu Sumar
private void sumar(){
//Solo se ejecuta si hay almenos una fila
if(table.getRowCount() > 0){
int count = 0;
int sum = 0;
//Se suman los datos...
for (int i = 0; i < table.getRowCount(); i++) {
count++;
sum += Integer.parseInt(model.getValueAt(i, 3).toString());
}
//Se agrega una fila con los datos...
model.addRow(new Object[]{
count,"","",sum
});
}
}
//Método para eliminar filas de la tabla...
//Se llama desde JPopupMenu Eliminar
private void eliminar(){
try {
model.removeRow(table.getSelectedRow());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "No hay fila seleccionada...");
}
}

Para el botón “Agregar” utilizamos el evento “ActionPerformed” al igual que para los “JMenuItem”. A diferencia para nuestra “Tabla” utilizamos el evento “MousePressed”, que llamará a nuestro “menú” desplegable emergente haciendo clic derecho. Si hay dudas sobre como agregar “Eventos” a objetos, en las primeras guías de la serie vimos con detalle ese punto.

Código Java
    private void agregarActionPerformed(java.awt.event.ActionEvent evt) {                                        
agregar();
}

private void tableMousePressed(java.awt.event.MouseEvent evt) {
if(evt.getButton()== MouseEvent.BUTTON3){
//Forma de localizar el punto en que se hace clic
//Parámetro x e y
//BUTTON3, clic derecho
popup.show(evt.getComponent(), evt.getX(), evt.getY());
popup.setVisible(true);
}
}

private void SumarActionPerformed(java.awt.event.ActionEvent evt) {
sumar();
}

private void EliminarActionPerformed(java.awt.event.ActionEvent evt) {
eliminar();
}

En este punto ya podremos ejecutar nuestro formulario y comprobar su funcionalidad. (Por si hay alguna duda en el proceso, debemos hacer clic derecho sobre nuestro archivo fuente y presionar “ejecutar archivo” ya que nuestro proyecto no tiene una clase principal definida)

Java básico 064. Función, calculando números primos.

Ejercicio: Realizar una función que permita calcular números primos en un rango específico.

Con esta primera clase calculamos si el número ingresado por el usuario es primo o no.

Código Java
import java.util.Scanner;

/**
*
* @author ECS
*/

public class NumerosPrimos {

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

public static void main(String[] args) {
//Scanner para obtener datos de la consola.
Scanner s = new Scanner(System.in);
System.out.print("Ingresa un número para ver si es primo: ");
//Guardamos en una variable el número ingresado
int n = s.nextInt();
//ejecutamos nuestra función
boolean esPrimo = esPrimo(n);
//Si devuelve True no es primo, por tanto ! negamos para ajustar al código
if(!esPrimo){
System.out.println("El número " + n + " es Primo.");
}
else{
System.out.println("El número " + n + " no es Primo.");
}
}
//La función recibe un entero como argumento
static boolean esPrimo(int n){
//inicializamos una variable boolean
boolean b = false;
//Los número negativo no entran como primos
if(n < 0){
b = true;
}
//El 1,2,3,5 son primos conocidos por tanto las obviamos
else if(n != 1 && n != 2 && n != 3 && n != 5){
//Con un for recorremos los números intermedios en 1 y n
//Comprobamos que el módulo con alguno de ellos de 0-cero
for (int i = 2; i < n; i++) {
//Si b es true, demuestra que n no es primo
if(b){
break;
}
b = (n%i == 0);
}
}
//Si n es 1,2,3 o 5 se false, que es primo.
else{
b = false;
}
return b;
}

}

Con la segunda clase podremos especificar un rango de números, en esta caso listamos los numero primos del 1 al 1000. Abajo anexamos una imagen con los primos del 1 al 1000; sirve para comprobar la funcionalidad del código.

Código Java
/**
*
* @author ECS
*/

public class NumerosPrimosDos {

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

public static void main(String[] args) {
//Utilizamos un for para comprobar los números primos del 1 al 1000
int total = 0;
for (int i = 0; i < 1000; i++) {
boolean esPrimo = esPrimo(i);
if(!esPrimo){
System.out.println("- " + i);
total++;
}
}
System.out.println("Hay un total de " + total + " números primos.");
}
//La función recibe un entero como argumento
static boolean esPrimo(int n){
//inicializamos una variable boolean
boolean b = false;
//Los números negativos no entran como primos, el 1-uno tampoco
if(n <= 0 || n == 1){
b = true;
}
//El 2,3,5 son primos conocidos por tanto las obviamos
else if(n != 2 && n != 3 && n != 5){
//Con un for recorremos los números intermedios en 1 y n
//Comprobamos que el módulo con alguno de ellos de 0-cero
for (int i = 2; i < n; i++) {
//Si b es true, demuestra que n no es primo y salimos del bucle
if(b){
break;
}
b = (n%i == 0);
}
}
//2,3 y 5 son los primeros primos conocidos
else{
b = false;
}
return b;
}

}