Saltar al contenido

JOptionPane. Entrada de datos en java.

JOptionPane es una clase de java que muestra cuadros de diálogo y que podemos utilizar como alternativa a la clase Scanner. Esta clase puede utilizarse también para la entrada de datos. Para poder utilizar esta clase, debemos observar la API de java y comprobar las características de la esta clase.

Por otro lado para construir una ventana que nos permita introducir información en nuestro programa, debemos utilizar entre otros, el método “showInputDialog“, perteneciente a la clase “JOptionPane”.

Dentro de la API lo primero que podemos ver es que la clase JOptionPane, pertenece al paquete “javax.Swing“, el cual debemos importar en nuestro proyecto si queremos usar esta clase.

Método showInputDialog de la clase JOptionPane.

En primer lugar, debemos saber que el método showInputDialog, es un método estático (static). Cuando un método es estático, debemos tener en cuenta que, para utilizarlo, hay que anteponer el nombre de la clase antes del método.

Por segundo lugar, cuando hemos visto la clase Scanner, hemos visto, que sus métodos nextInt(), nextLine(), estos no son estáticos. Cuando un método no es estático, no utilizamos el nombre de la clase antes del método, sino que lo que hacemos es crear un objeto de esa clase para poder utilizar sus métodos.

Por otra parte, dentro de la clase JOptionPane, nos vamos a encontrar con varios objetos llamados de la misma forma (showInputdialog). Todos ellos excepto uno, devuelven un objeto de tipo String, sin embargo, otro de ellos devolverá un objeto de tipo Object. que es el que vamos a utilizar para realizar el ejemplo.

Ejemplo de uso del método showInputDialog de la clase JOptionPane.

En este primer ejemplo el método recibirá una cadena de caracteres y devolverá un String, tal y como nos dice la API de java.

package arranque;
/* Importamos el paquete donde
 * se encuenta la clase JOptionPane*/
import javax.swing.*;
public class Principal {
	public static void main(String[] args) {
		
		/* Declaramos una variable String*/
		String nombre;
		
		/* Contruimos el cuandro de diálogo*/
		nombre=JOptionPane.showInputDialog("Introduce tu nombre");
		
		/* Mostramos el nombre por consola*/
		System.out.println(nombre);		
	}	    
}

En este caso, el ejemplo seria correcto, ya que el método showInputDialog, recibe un objeto, en este caso una cadena de caracteres. Recordamos que para java un String es un objeto. Además este método, devuelve un objeto de tipo String y realmente nombre es un objeto de tipo String, así que estaría correcto. ¿Y si devuelve un String y quiero almacenar un número?

ShowInputDialog con tipo de datos numéricos. Ejemplo práctico.

En este ejemplo vamos a ver como almacenar datos de tipo numérico utilizando JOptionPane y el método showInputDialog. En este primer ejemplo, vamos a provocar un error para darnos cuenta de lo que estamos haciendo.

package arranque;
/* Importamos el paquete donde
 * se encuenta la clase JOptionPane*/
import javax.swing.*;
public class Principal {
	public static void main(String[] args) {
		
		/* Declaramos una variable para almacenar el nombre.*/
		String nombre;
		
		/* Declaramos una variable String para almacenar la edad
		 * Aunque la edad es un tipo de dato numérico, el método
		 * showInputDialog, devuelve un dato de tipo String y
		 * no podemos almacenar un texto dentro de una variable
		 * de tipo numérico, por eso, debemos almacenar la edad
		 * en una variable de tipo String (cadena de caracteres)*/
		String edad;
		
		/* Contruimos el cuandro de diálogo para el nombre*/
		nombre=JOptionPane.showInputDialog("Introduce tu nombre");
		
		/* Contruimos el cuandro de diálogo para la edad*/
		edad=JOptionPane.showInputDialog("Introduce tu edad");
		
		/* Mostramos la información por consola*/
		System.out.println("Tu nombre es " + nombre 
				+ " y el año que viene tendrás " + (edad+1) + " años.");	
		
		/* En esta ultima linea tenemos un pequeño error. Ya que
		 * al sumar la edad, el operador + concatenará la edad que
		 * hemos introducido con el 1. Esto lo hará así, ya que
		 * no se pueden sumar números enteros con datos almacenados
		 * en variables objeto String.*/
	}	    
}

Para que el ejemplo sea correcto debemos hacerlo de la siguiente manera.

package ejerciciosJOptionPane;
/* Importamos el paquete donde
 * se encuenta la clase JOptionPane*/
import javax.swing.*;
public class ClasePrincipal {
	public static void main(String[] args) {
		
		/* Declaramos una variable tipo String
		 * para almacenar el nombre y otra para la edad
		 * Además declaramos una variable de tipo int
		 * para poder almacenar la edad que el usuario
		 * introduce en una variable de tipo numérico.*/
		String nombre, edad;
		int edadReal;
		
		/* Contruimos el cuandro de diálogo para el nombre*/
		nombre=JOptionPane.showInputDialog("Introduce tu nombre");
		
		/* Contruimos el cuandro de diálogo para la edad*/
		edad=JOptionPane.showInputDialog("Introduce tu edad");
		
		/* Almacenamos lo que tenemos en edad y que es de tipo String
		 * en la variable edadReal, que es de tipo int, haciendo una
		 * conversión de String a int*/
		edadReal=Integer.parseInt(edad);
		
		/* Mostramos la información por consola, pero en lugar de usar
		 * la variable edad, usaremos la variable edadReal*/
		System.out.println("Tu nombre es " + nombre 
				+ " y el año que viene tendrás " + (edadReal+1) + " años.");	
	}	    
}

Como podemos observar para que el ejemplo sea correcto, estamos obligados en ciertas ocasiones a realizar conversiones entre diferentes tipos de datos.