Fecha y hora actual: Miércoles 21 Ago 2019 00:21
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Lección 76: Introducción a Swing con JOptionPane

Responder al Tema

Índice del Foro > Programación en general > Lección 76: Introducción a Swing con JOptionPane

Autor Mensaje
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1043

Mensaje Publicado: Jueves 06 Dic 2012 19:52

Título del mensaje: Lección 76: Introducción a Swing con JOptionPane

Responder citando

Introducción a Swing: La clase JOptionPane

Hasta ahora, a pesar de haber migrado de los antiguos lenguajes Pascal y Modula 2 a uno moderno y potente como Java, no hemos avanzado mucho en la forma de programar que ya traíamos y en el tipo de aplicaciones que desarrollamos. Siendo un poco más concreto, seguimos creando aplicaciones de consola absorbiendo de Java solamente su capacidad para funcionar en cualquier plataforma. Claro que nos hemos puesto de lleno a trabajar en la Programación Orientada a Objetos pero nos falta mucho camino por recorrer para comenzar a explorar el verdadero mundo de Java.
Con esto no quiero dejar la idea de que programar aplicaciones de consola es antiguo, de hecho no lo es y hoy día se sigue haciendo muchísimo, sobretodo como componentes de los sistemas operativos. Las aplicaciones gráficas normalmente son las que van orientadas a usuarios finales que no tienen por qué tener conocimientos avanzados de computación y por tanto se intenta que las interfaces gráficas resulten intuitivas y amigables, tarea para nada sencilla.
Como dije alguna vez, Java fue pensado para ayudar al programador a realizar sus tareas de la forma más fácil posible proveyendo de librerías para ello y dando la posibilidad de usar cualquier librería hecha por terceros. Así, para la creación de interfaces gráficas existe un paquete (aún no nos hemos extendido en este tema) llamado Swing que contiene una serie de clases e interfaces (tampoco hemos hablado de ellas) que nos permiten crear ventanas, botones y todo lo que se les ocurra muy fácilmente. Claro, fácil en comparación con otros lenguajes y sobretodo en comparación a como se hacía antiguamente, lo cual no significa que no tenga complejidad.
Sé que deben morir de ganas ya por comenzar a crear ventanas, botones, listas desplegables, barras de herramientas y todo lo que suele verse en una aplicación. Tal vez hasta piensen que voy muy lento, pero créanme que me entenderán cuando entremos de lleno en el tema. Es muy lindo lograr ventanas vistosas llenas de cosas, pero luego hay que darle funcionalidad a esas cosas, hay que reflejar los cambios que una tarea genera, hay que pensar que el usuario puede presionar cualquier cosa en cualquier momento y por tanto tener una respuesta pensada para ello. Es un trabajo complejo mantener una fidelidad visible en la interfaz gráfica con respecto a lo que tenemos en memoria, pero lo veremos en su momento.

JOptionPane:

Existe un paquete de Java llamado javax el cual contiene dentro otro paquete llamado swing. De momento veamos a los paquetes como un conjunto de clases. El paquete swing tiene muchas clases dentro, y una de ellas es JOptionPane, pensada para mostrar cuadros de diálogo y mensajes al usuario. De sus muchas funcionalidades, de momento nos centraremos en las más básicas pero no menos interesantes.

==============================================

Hola Mundo con showMessageDialog:

¿Otra vez el Hola Mundo? Pues sí, pero un poquito más moderno. Comenzaremos utilizando la operación más sencilla de JOptionPane para lograr algo como esto:



Si aún tienen su proyecto HolaMundo pueden directamente trabajar sobre él o bien, crean otro nuevo con el nombre que quieran. Lo único que necesitamos es la clase principal. En mi ejemplo esta se llama HolaMundoModerno:
Código:
  1. public class HolaMundoModerno{
  2. public static void main(String[] args){
  3. }
  4. }

Para poder utilizar JOptionPane tenemos que importarla. Dado que está en el paquete swing que es parte del paquete javax la importación es:
Código:
  1. import javax.swing.JOptionPane;

JOptionPane contiene una operación estática llamada showMessageDialog la cual justamente muestra mensajes al usuario. Siendo estática no necesitamos crearnos un objeto de JOptionPane para usarla, simplemente es invocarla con los parámetros necesarios y ya. Para el ejemplo que acabamos de ver, el llamado sería:
Código:
  1. JOptionPane.showMessageDialog(null, “Hola Mundo”);

Como ven allí, la operación toma solamente dos argumentos. El primero es el padre del cuadro que se va a mostrar y el segundo es el mensaje que el cuadro debe contener.
Los cuadros de diálogo normalmente tienen a alguien como padre. ¿Qué significa esto? Piensen por ejemplo en Word; escriben algo y luego dan cerrar. Aparecerá un cuadro preguntando si quieren guardar los cambios realizados en el documento (esto es habitual en cualquier aplicación que nos permita trabajar con archivos de algún tipo). Este cuadro tiene como padre a la ventana principal, esto significa que aparece al centro de la misma y que además no nos permite acceder a ella hasta que hagamos algo con él. En el ejemplo, si ustedes no dicen si quieren Guardar, No guardar o Cancelar no podrán seguir usando el documento Word.

En nuestro sistema, si nosotros tuviéramos una ventana y decimos que esa ventana es el padre del cuadro a mostrar, entonces el cuadro aparecerá delante de ella y no nos dejará usarla hasta cerrarlo a él primero. Como nosotros no tenemos ninguna ventana ni nada parecido, pasamos como argumento la constante null. Cuando se pasa null como padre entonces el cuadro no tiene padre y aparecerá al centro de la pantalla.
El código completo del ejemplo sería:
Código:
  1. import javax.swing.JOptionPane;
  2.  
  3. public class HolaMundoModerno {
  4. public static void main(String[] args) {
  5. JOptionPane.showMessageDialog(null,"Hola Mundo");
  6. }
  7. }

La operación showMessageDialog muestra un cuadro con un ícono, un mensaje y un botón que dice Aceptar. El cuadro se cierra al presionar el botón o al cerrarlo y no genera nada más.

=====================================

Variante de showMessageDialog:

El cuadro que acabamos de mostrar con nuestro HolaMundoModerno tiene los siguientes atributos:

  • Un título que dice Mesaje.
  • Un ícono que muestra un signo de exclamación de apertura.
  • Un botón que dice Aceptar.
  • Un mensaje que se pasa como argumento a la operación showMessageDialog.


Normalmente uno como programador quiere personalizar un poquito estos atributos poniendo, por ejemplo, un título acorde al mensaje que se está mostrando y/o un ícono distinto. Para tal fin JOptionPane tiene sobrecargada la operación showMessageDialog de modo que reciba los argumentos que personalizan el cuadro. Su firma es la siguiente:

Código:
  1. public static void showMessageDialog(padre, mensaje, título, tipo);


No he colocado los tipos de los argumentos para que quede más claro, pero lo detallaré aquí:

  • El componente padre. De momento usaremos null.
  • Un objeto que contenga el mensaje. Normalmente aquí se pasa algo de tipo String pero puede ser cualquier objeto de cualquier clase. Veremos luego cómo saber qué “texto” contienen los objetos.
  • Un String con el título, y aquí sí debe ser estrictamente String.
  • Un entero que indica el tipo de mensaje, lo cual cambia el ícono a mostrar. Los valores válidos para este argumento ya están definidos como constantes en JOptionPane y son:
    • ERROR_MESSAGE: Muestra una cruz roja de error.
    • INFORMATION_MESSAGE: Muestra el mismo ícono con el signo de apertura de exclamación.
    • WARNING_MESSAGE: Muestra un signo de cierre de exclamación.
    • QUESTION_MESSAGE: Muestra un signo de pregunta.
    • PLAIN_MESSAGE: No muestra ícono.


Veamos un ejemplo con un mesaje de error:
Código:
  1. JOptionPane.showMessageDialog(null, “Ha ocurrido un error inesperado.”, “Error del sistema”, JOptionPane.ERROR_MESSAGE);



Esta es la forma más habitualmente utilizada de showMessageDialog. Existe otra más que agrega un quinto argumento que es un ícono personalizado por si no nos sirve ninguno de los cuatro predefinidos. Sin embargo es algo del tipo Icon y de momento no nos meteremos a trabajar con ello porque tiene alguna que otra cosita complicada.

======================================

Diálogos de confirmación con showConfirmDialog:

Digamos que showMessageDialog muestra diálogos de salida, una salida muy simple ya que es texto acompañado de un ícono. De momento nos conformaremos con esa salida ¿es mejor que la salida estándar no? Lo que nos concierne ahora es la entrada de datos. Veremos dos formas simples:
  • Según las opciones de un cuadro.
  • Entrada de texto en forma de String.

JOptionPane contiene una operación estática llamada showConfirmDialog que nos da la primera opción, es decir, cuadros de diálogo de confirmación. ¿Qué significa eso? El cuadro que vimos con showMessageDialog tenía solamente un botón de aceptar, pero es muy probable que uno quiera tener más botones. La función showConfirmDialog nos muestra cuadros de diálogo que pueden tener las siguientes opciones:
  • Un botón SI y otro NO.
  • Un botón SI, otro NO y otro CANCELAR.
  • Un botón ACEPTAR y otro CANCELAR.


Veamos un ejemplo con la forma más básica de showConfirmDialog:
Código:
  1. JOptionPane.showConfirmDialog(null,"Un diálogo de confirmación.");


Al igual que con showMessageDialog, la forma más simple de showConfirmDialog requiere dos argumentos: el padre y el mensaje a mostrar. Si pasamos null como padre entonces el mensaje aparece al centro de la pantalla. Con esa invocación tenemos un cuadro como este:



Ahora en vez de tener un botón Aceptar tenemos Si, No y Cancelar. El título dice Seleccionar una opción y el ícono es un signo de pregunta. El mensaje es el que yo pasé como argumento.

Antes de pasar a ver cómo personalizar un poco este cuadro veamos, una vez que lo mostramos, cómo sabemos qué botón ha presionado el usuario, siendo las posibilidades:
  • SI
  • NO
  • CANCELAR
  • CERRAR (el botoncito de cerrar que viene en algún lado de la barra de título, dependerá del sistema operativo: en Windows está a la derecha pero en Linux Ubuntu aparece a la izquierda).


Si se fijan más arriba dije que showConfirmDialog es una función, y pues, en efecto lo es y de tipo int. Si nosotros hacemos un llamado como el de más arriba, el valor devuelto quedará perdido, por tanto, si nos interesa capturarlo debemos asignárselo a una variable de tipo int. El número devuelto por la función corresponde al botón presionado por el usuario; de este modo estos números están predefinidos en JOptionPane como constantes:

  • YES_OPTION: Si se presiona el botón SI.
  • NO_OPTION: Si se presiona el botón NO.
  • CANCEL_OPTION: Si se presiona el botón CANCELAR.
  • OK_OPTION: Si se presiona el botón ACEPTAR (es igual que si se presiona SI).
  • CLOSED_OPTION: Si se cerró el cuadro sin elegir ninguna opción (con el botón de cerrar).

El siguiente programa muestra un cuadro como el de más arriba y luego muestra otro de salida indicando qué botón se presionó:

Código:
  1. import javax.swing.JOptionPane;
  2.  
  3. public class PruebaShowConfirm {
  4. public static void main(String[] args) {
  5. int i= JOptionPane.showConfirmDialog(null,"¿Que boton presionarás?");
  6.  
  7. switch(i){
  8. case JOptionPane.YES_OPTION: JOptionPane.showMessageDialog(null,"Presionaste SI");
  9. break;
  10. case JOptionPane.NO_OPTION: JOptionPane.showMessageDialog(null, "Presionaste NO");
  11. break;
  12. case JOptionPane.CANCEL_OPTION: JOptionPane.showMessageDialog(null, "Presionaste CANCELAR");
  13. break;
  14. case JOptionPane.CLOSED_OPTION: JOptionPane.showMessageDialog(null, "Cerraste sin elegir nada.");
  15. break;
  16. }
  17. }
  18.  
  19. }


Es un código super sencillo. Léanlo a ver si logran comprenderlo.

==========================================

Variantes de showConfirmDialog:

Las cosas se van poniendo un poco más interesantes ¿no? Si bien no estamos diseñando ventanas o cuadros con los botones y opciones que queremos, las operaciones de JOptionPane nos dan un nuevo abanico de posibilidades y nos permiten abandonar la vieja y querida consola. Veremos ahora como personalizar un poco estos cuadros de confirmación para luego ver la operación showInputDialog que nos permite mostrar un campo de texto para que el usuario ingrese algo en él.
La primera variante de showConfirmDialog es esta:
Código:
  1. public static int showConfirmDialog(padre, mensaje, titulo, tipoOpcion)

  • Padre: el component padre. Esto es lo mismo que ya vimos en las anteriores operaciones.
  • Mensaje: Un objeto que contiene el mensaje. De momento solo pasamos Strings.
  • Título: El título del cuadro de opciones.
  • TipoOpción: Un entero que indica las opciones que debe mostrar el cuadro de confirmación. En el ejemplo anterior, por defecto estaban SI, NO y CANCELAR pero pueden ser otras. Estos enteros ya están definidos como constantes en JOptionPane y son:
    • YES_NO_OPTION: Si queremos que el cuadro tenga un botón SI y otro NO.
    • YES_NO_CANCEL_OPTION: Si queremos que el cuadro tenga un botón SI, otro NO y otro CANCELAR, tal como el que ya vimos.
    • OK_CANCEL_OPTION: Un botón ACEPTAR y otro CANELAR.


Por ejemplo:

Código:
  1. JOptionPane.showConfirmDialog(null,"¿Aceptas o cancelas?"
  2. ,"Confirmar",JOptionPane.OK_CANCEL_OPTION);




Tengan siempre presente que la opción CLOSED_OPTION permanece presente en todos los cuadros porque el botón de cerrar siempre está. Es habitual tomar esta opción igual que si se presionara CANCELAR o, en algunos casos, se contestara NO.

La siguiente variante de showConfirmDialog toma un quinto argumento que es el entero que especifica el ícono que queremos mostrar, siendo estos los mismos que vimos para showMessageDialog. De otro modo se usa por defecto el ícono de pregunta. Por ejemplo:

Código:
  1. JOptionPane.showConfirmDialog(null,"Si continua podría perder toda la información guardada.\n\n¿Sigue adelante de todos Modos?","AVISO",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);




Siempre recuerden que showConfirmDialog es una función que retorna como entero el botón presionado.
A pesar de que con estos diálogos no se ingresa información directamente, son cuadros de entrada porque el usuario realiza una acción sobre ellos que es tomada por el sistema y en consecuencia se realizará alguna acción. Cabe destacar que los botones serán presionados con el ratón o el teclado, siendo ambos dispositivos de entrada.

Existe una última variante de esta función que admite un sexto argumento que es de tipo Icon para especificar un ícono personalizado para el cuadro. Seguiremos sin ver esto de momento.

=======================================

Diálogos de entrada con showInputDialog:

La última operación estática que veremos por ahora de JOptionPane es showInputDialog. Esta nos permite, como ya dije, mostrar cuadros de diálogo con un campo de texto para que el usuario ingrese algo con el teclado, por ejemplo:



Esta operación es una función de tipo String. ¿Qué retorna? Pues lo ingresado por el usuario en el cuadro de texto. Sea lo que sea que se ingrese, la función retorna un String. Veamos un ejemplo donde pedimos al usuario su nombre y luego lo mostramos en otro cuadro:




El código fuente es tan simple como esto:

Código:
  1. import javax.swing.JOptionPane;
  2.  
  3. public class PruebaInput {
  4. public static void main(String[] args) {
  5. String nombre= JOptionPane.showInputDialog("Ingresa tu nombre:");
  6. JOptionPane.showMessageDialog(null,"Bienvenido aJOptionPane "+nombre+".");
  7. }
  8. }


Lo que allí hicimos en dos líneas podríamos haberlo hecho en una sola:

Código:
  1. JOptionPane.showMessageDialog(null,"Bienvenido a JOptionPane " + JOptionPane.showInputDialog("Ingresa tu nombre:")+".");


Como ven, dado que showMessageDialog es una función, en vez de poner la variable nombre dentro de showMessageDialog, he puesto la invocación a showInputDialog directamente, lo cual da el mismo resultado.

¿Qué pasa si en vez de presionar ACEPTAR el usuario presiona CANCELAR o cierra el cuadro? Pues la función retorna el valor null, o sea, un String vacío, tal como si se presionara ACEPTAR sin haber ingresado nada dentro del campo de texto.

Esta forma de showInputDialog muestra un cuadro de entrada con el título Entrada y el ícono de interrogación. Veamos las variantes de ella que nos permiten cambiar estas opciones:

  • showInputDialog(padre, mensaje)

    Muestra, igual que la variante anterior, el cuadro con el título Entrada y el ícono de pregunta pero según el padre indicado en el argumento. Si aquí pasamos null da exactamente el mismo resultado que si invocamos a la variante anterior.

  • showInputDialog(padre, mensaje, titulo, tipo)

    Exactamente igual que con las anteriores operaciones.


La última variante admite un objeto Icon para personalizar el ícono y, como ya deben deducir, no la veremos ahora.

=====================================

Ejercicio – NominaPersonas V1.2:

Modernizaremos nuestro sistema NominaPersonas a una nueva versión donde ya no utilizará la consola como plataforma de entradas y salida, sino que usará cuadros de diálogo. En el siguiente enlace pueden bajar el JAR con el sistema ya modificado por mí con el fin de que vean como debería quedar:

https://www.dropbox.com/s/q0vs7mwzdlhh7sl/002-NominaPersonasV1.2.jar

Esta modificación no requerirá más que cambiar las líneas donde leíamos la entrada estándar por llamados a showInputDialog, las líneas de salida se cambiarán de System.out a showMessageDialog y ya. Se complicará con las operaciones que imprimen una persona o la lista de personas cargadas, pero seguro lo podrán resolver.

El ejercicio entonces consta de dos partes:
  • Usar todos los comandos del sistema que se bajen de la página que les pasé con el fin de ver cómo debe quedar implementado. Esta práctica puede llevar un rato.
  • Modificar el código fuente que ya tienen implementando los cambios.

Siempre se asumirá que la entrada es correcta en el sentido en que si pedimos algo, algo se ingresará, si pedimos números, números se ingresarán, etc.

La función showInputDialog, como dije, retorna siempre un String, por tanto, para pedir por ejemplo el documento no obtendrán un número sino una cadena. Asumiendo que la entrada es correcta, pasar un String a un entero se hace con la función estática parseInt de la clase Integer:
Código:
  1. int numero= Integer.parseInt(string);

Del mismo modo, para pasar una cadena a un double se hace con parseDouble de Double:
Código:
  1. double numero= Double.parseDouble(string);

Con esto podrán implementar todo el sistema, y será un ejercicio que afianzará la mayor parte de los conocimientos de Java que he dado hasta ahora.

========================================

Espero que con esto tengan para entretenerse. Saludos.



Ultima edición por Kyshuo Ayame el Viernes 07 Dic 2012 16:42; editado 1 vez
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Sebastián Marcos
Usuario Inquieto


Registrado: 04 Oct 2011
Mensajes: 133

Mensaje Publicado: Viernes 07 Dic 2012 03:12

Título del mensaje: Re: Lección 76: Introducción a Swing con JOptionPane

Responder citando

Seguimos al firme como siempre con el curso.
Gracias por la lección Kyshuo.
Saludos.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
sr floyd
Usuario Activo


Registrado: 05 Sep 2011
Mensajes: 196

Mensaje Publicado: Viernes 07 Dic 2012 17:47

Título del mensaje: Re: Lección 76: Introducción a Swing con JOptionPane

Responder citando

Así es!! en poco dias espero retomarlo al ritmo que me gusta! Saludos Kyshuo! Ok

Volver arriba
Ver perfil del usuario Enviar mensaje privado MSN Messenger
Sebastián Marcos
Usuario Inquieto


Registrado: 04 Oct 2011
Mensajes: 133

Mensaje Publicado: Domingo 09 Dic 2012 02:21

Título del mensaje: Re: Lección 76: Introducción a Swing con JOptionPane

Responder citando

Hola a todos!!!
Estimado Kyshuo, usando la versión del programa nómina Personas con los cuadros JOptionPane que dejaste para su descarga, resulta que me ha funcionado; pero para probar un poco la cuestión de la multiplataforma de los archivos jar quise probarlo en otra máquina que tiene sistema operativo Windows 7, y sólo puedo lanzar la aplicación desde la consola de Windows con el comando:

Código:
java -jar nombreDeArchivo.jar


y no con doble click sobre el archivo, saltándome el error: "Error. No se ha encontrado o cargado la clase principal C:\ ... \002-NominaPersonasV1.2,jar
Probé la aplicación en Linux y en otra versión de Windows (XP, en realidad en una máquina virtual) y puedo lanzar la aplicación simplemente con doble click. ¿Cuál será el problema?. Tengo actualizado el JRE en todas las plataformas.
Saludos.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1043

Mensaje Publicado: Domingo 09 Dic 2012 07:18

Título del mensaje: Re: Lección 76: Introducción a Swing con JOptionPane

Responder citando

Se me ocurren dos posibles problemas:

El path de windows no está bien configurado: Sería extraño dado que en vez de decirte que no se reconoce el comando te lanza una excepción, igualmente veríficalo por si acaso.

La versión que tienes en ese equipo no es Java 7 y por tanto deberías actualizarla. Esto se debe a que lo he programado bajo dicha plataforma y por tanto algunas funcionalidades pueden dar problemas en versiones anteriores. Esto es algo que no he atacado en sí en el curso pero que es importante. Tendría que agregarlo en la lección que habla de la distribución de los programas en Java...

Gracias por realizar estas pruebas, yo las hice pero siempre tenía Java 7 instalado en todos los SO donde los probé.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Sebastián Marcos
Usuario Inquieto


Registrado: 04 Oct 2011
Mensajes: 133

Mensaje Publicado: Domingo 09 Dic 2012 21:10

Título del mensaje: Re: Lección 76: Introducción a Swing con JOptionPane

Responder citando

Hola. Logré solucionar el problema. La ruta en el PATH estaba bien. Al final terminé desinstalando Java e instalándolo nuevamene (JDK versión 7, update 9).
Al hacer doble click me volvió a saltar el error. Luego fui a abrir con... (clickeando previamente botón derecho sobre el archivo jar), y me aparecían dos aplicaciones con idéntico nombre relativas a Java para correr la aplicación (Java(TM) Platform SE binary Oracle Corporation); una estaba seleccionada por defecto (con la cual saltaba el error), al cambiar a la otra se resolvió el problema.
Aún estoy viendo la diferencia entre estas dos opciones que aparecen para abrir los jar pues tienen idéntico texto.
Saludos.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1043

Mensaje Publicado: Martes 11 Dic 2012 21:18

Título del mensaje: Re: Lección 76: Introducción a Swing con JOptionPane

Responder citando

Amigo, las dos opciones corresponden a tus dos máquinas virutales. Cuando actualiza Java, no sustituye la versión anterior por la nueva, sino que agrega esta última. Si te fijas en tu carpeta de instalación de Java, dentro habrá dos carpetas JRE, cada una correspondiente a una versión.

Ten presente que podrías tener que agregar al PATH la nueva versión instalada.

Saludos.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
sr floyd
Usuario Activo


Registrado: 05 Sep 2011
Mensajes: 196

Mensaje Publicado: Lunes 13 Ene 2014 22:41

Título del mensaje: Lección 76: Introducción a Swing con JOptionPane

Responder citando

Hola a todos, estoy realizando el ejercicio de la lección que implica traslado de consola a cuadros de diálogo en el sistema NominaPersonas; Tengo ya casi todo listo, salvo por un inconveniente, el que precisamente menciona Kyshuo en el enunciado:
Cita:
Se complicará con las operaciones que imprimen una persona o la lista de personas cargadas, pero seguro lo podrán resolver.

Pues bien, aún no sé como resolverlo jeje; Resulta que no sé cómo pasarle toda la lista de personas como argumento a un solo JOptionPane.showMessageDialog, es decir, para que en un solo cuadro de diálogo aparezcan todas las personas registradas en el sistema de nominaPersonas; quizás se deba a que programando por consola se incluía un Print() dentro de un ciclo condicionado mientras se recorre toda la lista, sin embargo, no creo que sea posible incluir dicho ciclo (quizás un do_while) como parte del argumento de JOptionPane.showMessageDialog. ¿Podrían darme una pista?

Volver arriba
Ver perfil del usuario Enviar mensaje privado MSN Messenger
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1043

Mensaje Publicado: Martes 14 Ene 2014 01:39

Título del mensaje: Lección 76: Introducción a Swing con JOptionPane

Responder citando

Trabaja con un String y cuando este esté listo lo muestras con showMessageDialog.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
sr floyd
Usuario Activo


Registrado: 05 Sep 2011
Mensajes: 196

Mensaje Publicado: Martes 14 Ene 2014 06:27

Título del mensaje: Lección 76: Introducción a Swing con JOptionPane

Responder citando

Listo! Justo la pista adecuada! Tuve que modificar el código de imprimirPersona en Persona.java, que en la versión anterior era un procedimiento basado esencialmente en la operación System.out.print y al actualizarse queda como una función tipo String asi:
Código:
public String imprimirPersona(){
     
      return this.nombre.concat(" "+this.apellido+" "+String.valueOf(this.documento));
     
  }


Ese String es recibido ahora por listarListaPersonas de la clase listaPersonas.java que en la versión actualizada sigue siendo un procedimiento y es quien además de invocar a imprimirPersona también invoca a la operación showMessageDialog.
Siendo así que en la versión anterior, la clase nominaPersonas.java ya le delegaba la totalidad de la gestión a listarListaPersonas no fue necesario modificar su código.
Gracias por la pista Kyshuo!
Ok

Volver arriba
Ver perfil del usuario Enviar mensaje privado MSN Messenger
Alfonso Lara
Usuario Iniciado


Registrado: 07 May 2019
Mensajes: 13

Mensaje Publicado: Sábado 25 May 2019 23:24

Título del mensaje: Lección 76: Introducción a Swing con JOptionPane

Responder citando

Profesor Kyshuo, ¿hay posibilidadedes de reestablecer el link del ejercicio de este capítulo? Gracias por esta excelente lección.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Calculadora Java Swing

osmar7v Java 3 Viernes 23 Oct 2015 04:45 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Mostrar mensajes en aplicacion Swing

sapales Java 1 Martes 28 Oct 2014 19:28 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Curso de Introducción al desarrollo de videojue...

Tesis Programación de juegos o videojuegos 2 Jueves 06 Mar 2014 21:40 Ver último mensaje
El foro no contiene ningún mensaje nuevo

CA0 001: Introducción y preparación.

Kyshuo Ayame Programación en general 2 Jueves 20 Feb 2014 21:36 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Lección 101: Lectura/Escritura de archivos de t...

Kyshuo Ayame Programación en general 3 Sábado 26 Oct 2013 03:04 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,