validaciÓn de jtextfield.docx

18
VALIDACIÓN DE JTEXTFIELD: TEXTFIELD NUMÉRICO, BINARIO O SOLO LETRAS ¿Alguna vez han querido validar alguna entrada de datos de algún campo? Por ejemplo, ¿validar que lo que el usuario escribe sea solo números o solo letras? Pues conociendo las propiedades adecuadas de los elementos podemos lograr esto muy fácilmente. Trabajaremos en Java con NetBeans como IDE. Por ejemplo si queremos que en un campo (JTextField) sólo se ingresen números, tendríamos que editar el evento KeyTyped del JTextfield. Para esto, damos click derecho sobre el componente y seleccionamos Events->Key->KeyTyped tal como se muestra. Dentro de la función de dicho evento, colocamos lo siguiente: Cada vez que el usuario presione una tecla, se generará este evento y lo que hacemos es

Upload: alejandro-romero-huayta

Post on 20-Jan-2016

1.933 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: VALIDACIÓN DE JTEXTFIELD.docx

VALIDACIÓN DE JTEXTFIELD: TEXTFIELD NUMÉRICO, BINARIO O SOLO LETRAS

¿Alguna vez han querido validar alguna entrada de datos de algún campo? Por ejemplo, ¿validar que

lo que el usuario escribe sea solo números o solo letras? Pues conociendo las propiedades adecuadas

de los elementos podemos lograr esto muy fácilmente.

Trabajaremos en Java con NetBeans como IDE. Por ejemplo si queremos que en un campo

(JTextField) sólo se ingresen números, tendríamos que editar el evento KeyTyped del JTextfield. Para

esto, damos click derecho sobre el componente y seleccionamos Events->Key->KeyTyped tal como se

muestra.

Page 2: VALIDACIÓN DE JTEXTFIELD.docx

Dentro de la función de dicho evento, colocamos lo siguiente:

Cada vez que el usuario presione una tecla, se generará este evento y lo que hacemos es sacar el

caracter que presiono el usuario que se almacena en la variable evt. Luego, en un simple if decimos: si

el caracter no esta entre 0 y 9 lo desechamos (consumimos). Y de esta manera logramos que el

JTextField acepte sólo números.

También podemos agregar otro tipo de validación en este mismo evento como limitar la cantidad de

caracteres que se pueden escribir, esto se logra agregando un if que verifica la cantidad de caracteres

en el JTextField. Por ejemplo, para los números telefónicos de El Salvador que sólo tienen 8

caracteres los podríamos validar de la siguiente forma:

char car = evt.getKeyChar();

if(txtNumerico.getText().length()>=8) evt.consume();

if((car<'0' || car>'9')) evt.consume();

De igual manera, podríamos validar que solo se puedan digitar números binarios agregando el

siguiente código a la función del evento:

char car = evt.getKeyChar();

if(car!='0' && car!='1') evt.consume();

De manera similar, si solo quisiéramos letras tendríamos que poner:

char car = evt.getKeyChar();if((car<'a' || car>'z') && (car<'A' || car>'Z')) evt.consume();

Como permitir la barra espaciadora dentro de la caja de texto:

char car = evt.getKeyChar();    if((car<'a' || car>'z') && (car<'A' || car>'Z')    && (car!=(char)KeyEvent.VK_SPACE)){   evt.consume();}

Con KeyEvent.VK_SPACE se captura la tecla espaciadora

Como permitir vocales con tilde en la caja de texto:

char car = evt.getKeyChar();        

Page 3: VALIDACIÓN DE JTEXTFIELD.docx

if((car<'a' || car>'z') && (car<'A' || car>'Z')               && car !='á' //Minúsculas                 && car !='é'                && car !='í'                && car !='ó'               && car !='ú'       && car !='Á' //Mayúsculas                 && car !='É'                && car !='Í'                && car !='Ó'               && car !='Ú'                 && (car!=(char)KeyEvent.VK_SPACE)){        evt.consume();   }

Como se hace para que acepte espacios  en la validación de las  letras… x que si me asepta las

minusculaas  y las mayusculas pero si kiero DAR ESPACIO NO ME ASEPTA

Para que acepte espacios se puede hacer así:

char car = evt.getKeyChar();   

if((car’z') && (car’Z') && (car!=(char)KeyEvent.VK_SPACE)){

   evt.consume();

}

Con KeyEvent.VK_SPACE se captura la tecla espaciadora

Entonces evt es una variable que guarda o recibe los eventos de esa caja de texto cuando se presiona

una tecla

Necesito que si el campo no tiene ningún dato no me deje pasar

Agregue dos jtextbox, al primero le puse el evento FocusLost y dentro le he puesto este código

if (jTextField1.getText().equals("")){

jTextField1.requestFocusInWindow();

}

De este modo si dejo el textbox1 vacío e intento pasarme al otro este regresa el foco al primer textbox. Claro este no funcionaría si el usuario no hace clic en el texbox1 para empezar.

Page 4: VALIDACIÓN DE JTEXTFIELD.docx

por alguna razón me funciona la validación de las letras y números pero no de la barra espaciadora

char car = evt.getKeyChar();

if((car< '0' || car>'9') && (car< 'a' || car>'z') && (car!=' ')){

evt.consume();

}

solo quiero que me acepte 2 LETRAS LA “s” Y LA “c

char car = evt.getKeyChar();

if(car !='s' && car !='c' )

{

evt.consume();

}

Como lo hago para que me acepte numero y el guion ‘ – ‘ ??

char car = evt.getKeyChar();

if((car’9′) && car !=’-’  ) evt.consume();

Poder poner nombres con tilde?

Encontré la solución, solo tenes que agregar cada letra con tilde a la sentencia de evaluación IF y te va

a quedar todo así:

char car = evt.getKeyChar();       

if((car’z') && (car’Z')            

&& car !=’á’             

&& car !=’é’           

&& car !=’í’           

&& car !=’ó’           

&& car !=’ú’           

&& (car!=(char)KeyEvent.VK_SPACE)){     

evt.consume();   

}

Espero que eso te ayude.

código con el cual podremos convertir toda letra minúscula a mayúscula que sea digitado en un

JTextfield.

Page 5: VALIDACIÓN DE JTEXTFIELD.docx

Código PHP:

public void keyTyped(java.awt.event.KeyEvent evt) {

  char c = evt.getKeyChar();//sacamos el caracter que se ha presionado

 if(c<'a' || c>'z') evt.consume();//si NO es letra, no hacemos nada

 evt.setKeyChar((char)(c-32));//seteamos el caracter pero en mayusculas

El truco esta en, una vez validado que el caracter este entre 'a' y 'z', lo que hacemos es restarle el

numero 32. Esto lo hacemos para convertir una letra minúscula a mayúscula gracias al código ascii de

la letra. Explicación: la letra 'a' tiene el código ascii 97,al restarle 32 conseguimos el número ascii 65

que es el código de la letra 'A'. La letra 'b' tiene el ascii 98, al restarle 32 conseguimos el ascii 66, que

es el de la letra 'B' y así sucesivamente...

Primero al botón añádele un KeyPressed, lo puedes hacer dándole clic derecho al botón events->key->keyPressed

Dentro del código que se te generó implementa lo siguiente:

char car=(char) evt.getKeyCode();

Page 6: VALIDACIÓN DE JTEXTFIELD.docx

if(car==evt.VK_ENTER){

System.out.println("se presiono la tecla Enter");

//o bien puedes colocar algún método que tengas.

}

Otra cosa, este evento solo se ejecutara cuando el foco este en el botón, ya que si el foco está en un jTextField u otro botón el evento no se generará.

char car = evt.getKeyChar();

if((car<'0' || car>'9')) evt.consume();

JOptioPane, showMessageDialog, showConfirmDialog, showInputDialog ,

showOptionDialog

La clase JOptionPane es una clase que hereda de JComponent. Ésta clase nos permitirá crear alertas o

cuadros de diálogos simples para poder solicitar, o mostrar, información al usuario.

Los métodos que revisaremos en este pequeño tutorías serán:

1. JOptionPane.showMessageDialog(…)

2. JOptionPane.showConfirmDialog(….);

3. JOptionPane.showInputDialog(…);

4. JOptionPane.showOptionDialog(…);

Cada uno de estos métodos presenta una particularidad distinta pero todos ellos nos muestran una

ventanita pop up que nos permitirá captar información del usuario.

1. showMessageDialog

JOptionPane. showMessageDialog (Component componentePadre, Object mensaje, String titulo,

int tipoDeMensaje)

Nos sirve para mostrar información, por ejemplo alguna alerta que queremos hacerle al usuario.

Veamos cuales son los principales argumentos del método.

componentePadre: es por el ejemplo el Frame desde el cual lo llamamos. Si queremos lo podemos

poner en null, que es mas o menos lo mismo.

Mensaje: es lo que queremos que diga el cuadro de dialogo.

Titulo: el titulo.

tipoDeMensaje: son constantes que le dirán a java que tipo de mensaje queremos mostrar. De acuerdo

a esto seran los iconos que se mostraran en el cuadro de dialogo. Las opciones son

ERROR_MESSAGE

INFORMATION_MESSAGE

WARNING_MESSAGE

Page 7: VALIDACIÓN DE JTEXTFIELD.docx

QUESTION_MESSAGE

PLAIN_MESSAGE

Si quisiéramos mostrar un icono personalizado, podemos agregarlo al final como un argumento más.

Ejemplo:

JOptionPane.showMessageDialog(null,"Acceso Denegado","Error",

JOptionPane.ERROR_MESSAGE);

2. showConfirmDialog

Éste método sirve para pedirle al usuario una confirmación. Por ejemplo una confirmación de salida

del sistema

Int respuesta =JOptionPane. showMessageDialog (Component componentePadre, Object

mensaje, String titulo, int tipoDeOpcion);

El anterior es la versión corta del los argumentos del método. La versión larga incluye el tipo de

mensaje y el icono, por si queremos personalizarlo.

Los argumentos son idénticos a los del método anterior. Excepto por el tipo de opción, que es otra

constante y los valores pueden ser:

DEFAULT_OPTION

YES_NO_OPTION

YES_NO_CANCEL_OPTION

OK_CANCEL_OPTION

Como vemos el método devuelve una un entero que nos permitirá captar cual es la opción elegida por

el usuario. Los valores serán 0 para Si, 1 para No, 2 para Cancelar y -1 para el cierre de la ventana.

Así podremos preguntar cual es el valor devuelto y realizar la acción que deseamos.

Ejemplo

int i=JOptionPane.showConfirmDialog(this,"¿Realmente Desea Salir de Hola Swing?","Confirmar

Salida",JOptionPane.YES_NO_OPTION);

if(i= =0){

System.exit(0);

}

3. ShowInputDialog

Este método nos muestra una ventana donde podremos insertar una String.

Por ejemplo cuando queremos que el usuario inserte su nombre. La versión corta del método es

String respuesta = JOptionPane.showInputDialog(Object mensaje)

Este método devolverá una String para poderla utilizar después. La versión larga de los argumentos

del método es similar a los anteriores.

Ejemplo:

Page 8: VALIDACIÓN DE JTEXTFIELD.docx

String nombre =JOptionPane.showInputDialog("Inserte su Nombre");

this.lbl_nombre.setText(nombre);

También podemos crear un cuadro de dialogo que contenga un combo con las opciones

predeterminadas que le queremos dar al usuario.

Ejem:

Object[] valoresPocibles = {"Pedro", "Juan", "Carlos" };

Object jefe = JOptionPane.showInputDialog(null,

"Seleccione cual es su Jefe Inmediato", "Seleccionar Jefe",

JOptionPane. QUESTION_MESSAGE, null,

valoresPocibles, valoresPocibles[0]);

this.lbl_jefe.setText((String)jefe);

El array de valores posibles nos muestra en un combo cuales serán los jefes que podemos mostrar. El

último argumento del método nos muestra cual será la opción seleccionada por defecto

showOptionDialog

Con este método podemos crear cuadros de diálogos con botones personalizados. Esta bueno para darle un toque personal a los cuadros de dialogoEl método tiene la forma:

Int res = JOptionPane.showOptionDialog(Component componentePadre, Object mensaje,

String titulo, int tipoDeOpcion, int tipoMensaje, Icon icono, Object[] botones, Object

botonDefault)

Aquí lo único que varia con el resto es el array de botones que vamos a tener, debemos destacar que no hace falta que creemos botones, solo tenemos que poner cual será el texto que saldrá en el.

Object[] botones = {"Si dale va a estar bueno", "No?... buuu" };

int i=JOptionPane.showOptionDialog(null, "¿Queres salir a Bailar esta Noche?", "Sita",

JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,null, botones, botones[0]);

System.out.println(i);

Después podemos tomar la respuesta como lo hacíamos con el confirmDialog.Bueno hasta la próxima, esto es lo más importante en los mensajes o alertas.

REDONDEAR DECIMALES EN JAVA

Continuando con el ciclo de tips en el lenguaje #java en esta ocasión les presento un

método muy utilizado y muy rebuscado en #SanGoogle, el método para redondeo de

double a una cierta cantidad de decimales. Después de haber encontrado un sin número

Page 9: VALIDACIÓN DE JTEXTFIELD.docx

de métodos en internet, de los cuales algunos no hacían lo que necesitaba encontré este

método conversando con un amigo mio en el trabajo. Este método usa el metodo rint()

de la clase Math de java, este metodo tiene la peculiaridad de redondear al entero

mayor o igual al numero double que estee en su argumento.

Veamos el metodo: (para un redondeo a 2 decimales)

public double Redondear(double numero)

{

       return Math.rint(numero*100)/100;

}

Bien expliquemos que hace el método, primero multiplicamos por una potencia de 10 al

número que deseamos redondear, en este caso 10 al cuadrado (la potencia de 10

depende del número de cifras a las cuales queremos redondear, si queremos redondear a

4 cifras elevamos a la potencia 4 esto sería 10000), luego lo pasamos como parámetro

del método ya mencionado rint(), luego el resultado lo dividimos por la misma

potencia de 10 por la que multiplicamos (en este caso cuadrado) para retornar al valor

inicial redondeado la posición de la coma dentro del numero .

Veamos un ejemplo:

Sea el numero 25.63874 y queremos redondearlo a 3 cifras, entonces el método tiene

que ser redefinido como comentamos en un principio, multiplicar por la potencia de 10,

en este caso elevarlo al cubo ya que redondearemos a 3 cifras y modificar el método

como lo mostramos a continuación.

public double Redondear(double numero)

{

      return Math.rint(numero*1000)/1000;

}

Page 10: VALIDACIÓN DE JTEXTFIELD.docx

Despues de mandar como parametro del metodo Redondear el numero 25.65874,

obtendremos 25.659 que es el redondeo a 3 cifras del número.

Si gustan pueden implementar su metodo que les permita pasar la cantidad de cifras a

redondear, eso se los dejo como tarea a ustedes.

Un saludo y espero les sirva este método.

Actualizacion:

Aqui les dejo el método Redondear con 2 argumentos, el primero es el número a

redondear y el segundo es la cantidad de digitos a redondear. Simplemente

usaremos los metodos de la clase Math de Java.

public static double Redondear(double numero,int digitos)

{

      int cifras=(int) Math.pow(10,digitos);

      return Math.rint(numero*cifras)/cifras;

}

Despues de revisar que existia un error en algunos redondeos, he encontrado la forma

de realizar el redondeo exacto, esta vez sin errores. Para esto usaremos la clase

BigDecimal y usaremos sus metodos.

public static void main(String[] args)

{

      double valor = 1254.625;

      String val = valor+"";

      BigDecimal big = new BigDecimal(val);

Page 11: VALIDACIÓN DE JTEXTFIELD.docx

      big = big.setScale(2, RoundingMode.HALF_UP);

      System.out.println("Número : "+big);

}

M I S E G UND O PR O Y E C T O

A continuación resolveremos un segundo proyecto, el cual tomaremos el siguiente ejercicio:

E J ERC I C I O 02 Encontrar el valor de la función: r = 5m2 + n2

Para resolver este ejercicio abriremos un nuevo proyecto (Esto es otra forma de llamar a un nuevo proyecto):

Figura 01: Eleccion de un nuevo proyecto

Figura 02: Eleccion de un proyecto Java Application

Page 12: VALIDACIÓN DE JTEXTFIELD.docx

Figura 03: Ingresar nombre del proyecto, paquete y de la clase principal

Figura 04: Proyecto listo para programar

Ahora estamos listo para comenzar con la programación de este ejercicio. Antes hay que recordar como esta resuelto en algoritmo.

algoritmo Funcionvar

inicio

fin

entero : m, n, r

Leer(m) Leer(n) Leer(r)r = 5 * m^2 + n^2mostrar ( 'El valor de la función es ', r )

Page 13: VALIDACIÓN DE JTEXTFIELD.docx

La solución en código de este ejercicio es el siguiente:

En este ejercicio utilizaremos los métodos de la clase Math, La clase Math tiene miembros dato y funciones miembro estáticas.

Page 14: VALIDACIÓN DE JTEXTFIELD.docx

Explicaremos algunas funciones de Math en la siguiente tabla:

Función Significado Ejemplo Resultado

abs Valor absoluto de un número int a;a = Math.abs (-45);

a = 45

ceil Devuelve el valor redondeado hacia el número superior.

int redondeado;redondeado = Math.ceil(12.5);

redondeado =13

cos Coseno de un angulo double valor_coseno;valor_coseno = Math.cos(30);

valor_coseno=0.8660..

exp Devuelve el valor de la base del logaritmo neperiano, elevado a la potencia del exponente.

double valor_exp1; double valor_exp2; valor_exp1 = Math.exp(1); valor_exp2 = Math.exp(2);

valor_exp1 = 2.7182.. valor_exp2 = 7.3890..

floor Devuelve el valor redondeado a la baja del número

double r,q;r = Math.floor(12.5);q = Math.floor(7.9);

r = 12 q = 7

log Devuelve el logaritmo del parámetro X.

double a, b, c;a = Math.log(0);b = Math.log(1);c = Math.log(2);

a = -Infinity b = 0c = 0.69314718..

max Devuelve entre dos números el mayor de ellos

int mayor;mayor = Math.max(3,5);

mayor = 5

min Devuelve entre dos números el menor de ellos

int menor;menor = Math.min(3,5);

mayor = 3

pow Eleva un número a una potencia X.Math.pow(numero, potenciaX)

double potencia;potencia = Math.pow(5,2);

Potencia = 25

sqrt Devuelve la raiz cuadrada de un valor.

Double raiz;raiz = Math.sqrt(3);

raiz = 1.7321...

Comprendido la clase Math, ahora pasamos a ejecutar el programa para ver los resultados obtenidos.

Page 15: VALIDACIÓN DE JTEXTFIELD.docx

Explicaremos algunas funciones de Math en la siguiente tabla:

Debe de obtenerse el siguiente resultado: