Java - Problema con textField

 
Vista:
sin imagen de perfil

Problema con textField

Publicado por Makros (14 intervenciones) el 06/05/2013 20:19:52
Buenas de nuevo a todos,

Mi consulta de hoy es la siguiente. Intento acceder a la primera posición de un JTextBox para comprobar si el primer caracter introducido es una letra o un número. Os copipego el codigo para que lo veais mejor.

1
2
3
4
5
6
7
8
9
10
11
12
13
if (Character.isDigit(txtNifCif.getText().charAt(0))){
	lblNifCif.setText("Validando un NIF");
	NIF nuevoDNI = new NIF(txtNifCif.getText());
	if (nuevoDNI.checkNif(nuevoDNI.getNumNif(), nuevoDNI.getCharNif())== true){
			icono.setVisible(true);
			icono.setIcon(iconoOK);
	}else{
			icono.setVisible(true);
			icono.setIcon(iconoKO);
	}
}else{
	if (txtNifCif.getText().charAt(0)=='X'){lblNifCif.setText("Validando un NIE");}
		lblNifCif.setText("Validando un CIF");


Resulta que al intentar acceder a la posicion '0' del JtextBox me da una excepcion tal que esta:

1
2
3
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
	at java.lang.String.charAt(Unknown Source)
	at VentanaPrincipal_CIF_NIF.actionPerformed(VentanaPrincipal_CIF_NIF.java:122)


Intenté controlarlo con una excepcion pero no hay manera. Siempre me da esa excepcion si en el JTextBox no escribo nada.

Espero que podais ayudarme. Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con textField

Publicado por Pedro (1 intervención) el 07/05/2013 13:50:13
Quizá podrías hacer previamente una comprobación de si el contenido del JTextBox no es nulo, y hacer otra cosa en tal caso. Creo que eso podría ayudarte. Si te fijas, te lanza un OutOfBounds, es decir, fuera de los límites. Hace referencia a BufferOverflows, desbordamientos de la memoria. Si tu llamas al caracter de índice 0 del String x y no hay tal caracter o no hay tal String, o el programa no ha reservado ese espacio de memoria (quizá lo has inicializado pero no definido, o nolosé...), es muy probable que te salten fallos. Comprueba que los nombres estén bien escritos también.

En fin, no soy un experto, y no estoy familiarizado con todo el código que usas, pero quería darte mi opinión o lo que yo haría al menos. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problema con textField

Publicado por Makros (14 intervenciones) el 07/05/2013 16:01:15
Voy a hecharle un vistazo ahora y te cuento. Tienes razon en lo que dices que al pedir un caracter en la posicion 0 que no existe se vuelve loco.

He conseguido solucionarlo controlando la excepcion por medio de un catch. De momento va bien. Iré comentando según vaya teniendo problemas.

Muchas gracias por tu ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con textField

Publicado por Makros (14 intervenciones) el 07/05/2013 20:37:58
De nuevo tengo un problema con el JTextField.

Resulta que ahora he definido un JTextField en el que controlo que el numero máximo de caracteres que se introducen 10. Anteriormente lo tenia puesto para 9 ya que solo estaba verificando el NIF (9 caracteres en total), y ahora mismo estoy verificando el NIF y el CIF en el mismo JTextField, por lo que he aumentado el tamaño en 1.

En resumidas cuentas tengo un JTextField de 10 espacios; el NIF valida 9 y el CIF valida 10.

Con el método de Validacion del CIF no tengo ningún problema.

Con el método de validación del NIF tengo siempre el mismo problema. Me salta una excepcion que tengo controlada que comprueba un pattern que he definido para el NIF de la siguiente manera:

1
private final static Pattern nifPattern = Pattern.compile("[[0-9]{8}[A-Z]]");


Siempre que introduzco un NIF correcto me dice que el formato del DNI está mal, es decir, no cumple con el pattern.

¿Alguna idea? Ya no se que mas probar.

Un saludo y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con textField

Publicado por Makros (14 intervenciones) el 08/05/2013 10:53:43
Solucionado, había un problema con el pattern.

Antes:

1
private final static Pattern nifPattern = Pattern.compile("[[0-9]{8}[A-Z]]");


Después:

1
private final static Pattern nifPattern = Pattern.compile("[[0-9]{8}[A-Za-z]]");


Con este pattern lo que consigo es que el String que compone el NIF tenga 8 numeros y una letra (Mayúscula o minúscula) .

Luego en el constructor de la clase NIF compruebo que cumple el pattern definido previamente. Si cumple el patrón me guardo en una variable int la parte numérica del NIF y en un char la parte de la letra para verificarla luego.

1
2
3
4
5
6
7
8
9
public NIF(String identificacion) throws excFormatoNIF{
		super(identificacion);
		// No cumple el patrón.
        if (!nifPattern.matcher(identificacion).matches()) {
        	throw new excFormatoNIF ("Formato de NIF incorrecto (Ej: 12345678B)");
        }
        this.numNif = Integer.parseInt(identificacion.substring(0,8));
        this.letNif = Character.toUpperCase(identificacion.charAt(8));
	}


Así me funciona perfectamente. Espero que os sirva de ayuda y si alguien necesita una mano que lo diga que por aqui estaremos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 686
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con textField

Publicado por xve (345 intervenciones) el 08/05/2013 16:10:53
Gracias por comentarlo!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problema con textField

Publicado por Makros (14 intervenciones) el 09/05/2013 16:34:49
No hay de que!! Solo quiero contribuir a que haya una gran comunidad de usuarios activos. Iré publicando por aqui todas las dudas que me vayan surgiendo que no son pocas. De hecho voy a abrir un nuevo hilo para poner una duda de un nuevo ejercicio que estoy intentando hacer con hilos y clases.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Problema con textField

Publicado por Isaias (8 intervenciones) el 09/05/2013 18:43:09
Hola Makros:

Intente crear la clase NIF, pero me marca dos errores:

public NIF(String identificacion) throws excFormatoNIF{ Cannot be resolved to a typed.

y

super(identificacion); El constructor no esta definido

Los dos errores estan en el constructor de la clase:

1
2
3
4
5
6
7
8
9
public NIF(String identificacion) throws excFormatoNIF{
		super(identificacion);// No cumple el patrón.
		if (!nifPattern.matcher(identificacion).matches()) {
			throw new excFormatoNIF ("Formato de NIF incorrecto (Ej: 12345678B)");
			}
		this.numNif = Integer.parseInt(identificacion.substring(0,8));
		this.letNif = Character.toUpperCase(identificacion.charAt(8));
		}
	}


Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con textField

Publicado por Makros (14 intervenciones) el 10/05/2013 15:29:55
Buenas Isaias,

Te da ese error porque la clase NIF hereda de una superclase abstracta que se llama ID. En dicha clase abstracta simplemente ponemos un atributo de tipo String.

Quedaría algo asi:

1
2
3
4
5
6
7
8
/*Clase Abstracta*/
public abstract class ID {
	private String identificacion;
 
	/*Constructor de la clase abstracta ID*/
	public ID(String ident){
		this.identificacion = ident;
	}


Y la clase que hereda de ID, en nuestro caso NIF:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*Clase NIF (Hereda de ID)*/
public class NIF extends ID {
 
	/*Pattern del NIF:*/
	private final static Pattern nifPattern = Pattern.compile("[0-9]{8}[A-Za-z]");
	private int numNif;
	private char letNif;
 
	/*Constructor de la clase DNI*/
	public NIF(String identificacion) throws excFormatoNIF{
		super(identificacion);
		// No cumple el patrón.
        if (!nifPattern.matcher(identificacion).matches()) {
        	throw new excFormatoNIF ("Formato de NIF incorrecto (Ej: 12345678B)");
        }
        this.numNif = Integer.parseInt(identificacion.substring(0,8));
        this.letNif = Character.toUpperCase(identificacion.charAt(8));
	}


Es un ejemplo un poco chorras para conocer y manejar la herencia pero es una forma de aprender. Espero que te sirva de ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con textField

Publicado por Isak (1 intervención) el 10/05/2013 22:25:24
Muchas Makros gracias por la ayuda, ya pude ejecutar el programa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar