elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Ayuda con JOptionPane mostrar datos en una única ventana.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con JOptionPane mostrar datos en una única ventana.  (Leído 630 veces)
rubia28

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Ayuda con JOptionPane mostrar datos en una única ventana.
« en: 9 Diciembre 2020, 19:27 pm »

Buenas tardes a todos,

Estoy desarrollando una aplicación que solicita y muestra los datos por pantalla a través de JOptionPane con ventanas y no por consola como he hecho siempre.

He conseguido poner todo más o menos correctamente, pero a la hora de listar la información introducida por el usuario, el programa me crea una ventana para cada información introducida y me gustaría que sacara toda la información a la vez.

Ejemplo: Si he dado de alta 2 clientes con todos sus datos, que abra una única ventana con los datos de ambos clientes y no una ventana por cliente.

¿Hay alguna forma de que el programa pueda realizar esta función? Os pongo en código como lo tengo actualmente.

Código
  1.    /**Método para dar de alta a nuevos clientes en la base de datos del hotel. */
  2.      public void altaCliente(){
  3.  
  4.        String dni = JOptionPane.showInputDialog("NUEVO CLIENTE: \n" +"Escriba el DNI del cliente: \n\n");
  5.  
  6.    /**Llamada al método comprobarDni para comprobar que el cliente que se está dando de alta no ha sido ya creado. */    
  7.        Cliente cliente = comprobarDni(dni);
  8.    /** Si el dni introducido no coincide con el de ningún cliente existente devuelve null y continua con el proceso de alta del cliente nuevo.
  9.     En caso que el dni introducido ya exista significa que el cliente ya ha sido registrado previamente y nos devolverá un mensaje de error. */
  10.        if(cliente == null) {
  11.          String nombre;  
  12.          String apellidos;
  13.          String telefono;
  14.  
  15.          nombre = JOptionPane.showInputDialog("Introduzca el nombre del cliente: ");
  16.          apellidos = JOptionPane.showInputDialog("Introduzca los apellidos del cliente: ");
  17.          telefono = JOptionPane.showInputDialog("Introduzca el núm. de teléfono del cliente: ");
  18.  
  19.        clientes.add(new Cliente(nombre,apellidos,dni,telefono));
  20.  
  21.        JOptionPane.showConfirmDialog(null,"Se ha añadido el siguiente cliente en la base de datos: \n"
  22.        + "\nNombre: " +nombre
  23.        +"\nApellidos: " +apellidos
  24.        +"\nDni: " +dni
  25.        + "\nTeléfono: "+telefono);
  26.  
  27.      }    
  28.        else {
  29.            JOptionPane.showMessageDialog(null, "El DNI introducido ya existe. El cliente que está dando de alta ya se encuentra registrado en el sistema.","ERROR", 0);
  30.      }
  31.  
  32.      }
  33.  
  34.    /** Método para comprobar que si dni introducido por teclado coincide con el de agún cliente ya registrado. */
  35.    public Cliente comprobarDni(String dni){
  36.  
  37.        for (int i=0; i < clientes.size(); i++){
  38.            Cliente cliente = clientes.get(i);
  39.  
  40.            if (dni.equals(cliente.getDni())){
  41.                return cliente;
  42.            }
  43.        }
  44.        return null;  
  45.    }
  46.  
  47.    /** Método para listar los clientes registrados. */
  48.    public void mostrarClientes() {
  49.        JOptionPane.showMessageDialog(null,"LISTA DE CLIENTES: ");
  50.        for (int i=0; i < getClientes().size(); i++) {
  51.            Cliente aux = getClientes().get(i);
  52.  
  53.        JOptionPane.showMessageDialog(null,aux.getNombre() + " " + aux.getApellidos() + ", Dni." + aux.getDni() + ", Telf." + aux.getTelefono());
  54.        }
  55.  
  56. }

Me gustaría que en la Función mostrarClientes() pudiera crear una única ventana que fuera LISTA CLIENTES y en ella aparecieran todos los clientes que se han introducido y no que primero aparezca la ventana de LISTA CLIENTES, Cliente 1 y sus datos, cliente 2 y sus datos por ejemplo.

Mil gracias por la ayuda, saludos.


En línea

K-YreX


Desconectado Desconectado

Mensajes: 846



Ver Perfil
Re: Ayuda con JOptionPane mostrar datos en una única ventana.
« Respuesta #1 en: 10 Diciembre 2020, 06:34 am »

Supongo que el problema sí lo tienes localizado, no? Cada vez que usas showMessageDialog() creas un cuadro de diálogo nuevo. Si metes este método dentro del for() que se repite n veces, crearás n cuadros de diálogo.

La solución es muy sencilla: concatenar en un string todo el texto que quieres mostrar y llamar a showMessageDialog() una única vez fuera del for():
Código
  1. public void mostrarClientes(){
  2.  String mensaje = "LISTA DE CLIENTES"; // Lo inicializamos a una cadena vacia o a un mensaje inicial que queramos mostrar
  3.  Cliente aux;
  4.  for(int i = 0; i < getClientes().getSize(); ++i){
  5.    Cliente = getClientes().get(i);
  6.    // Ahora concatemos la informacion de cada cliente en una linea nueva
  7.    mensaje += "\nNombre: " + aux.getNombre() + " " + aux.getApellidos() + " - DNI: " + aux.getDni(); //... y lo que sea ...
  8.  }
  9.  // Y una vez acabado el for(), mostramos un unico JOptionPane
  10.  JOptionPane.showMessageDialog(null, mensaje);
  11. }

PD: Para concatenar strings es más eficiente usar StringBuffer o StringBuilder por si quieres echar un ojo a esas clases o ya las conoces... :rolleyes:
Suerte  :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
rubia28

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Ayuda con JOptionPane mostrar datos en una única ventana.
« Respuesta #2 en: 10 Diciembre 2020, 17:14 pm »

Muchisimas gracias por la ayuda!!

Tenía un poco localizado que era por estar dentro de for.. pero no sabía como poder hacerlo.. ahora ya viendo que hay que inicializar una primera variable String fuera como has indicado y sacar el for en mensaje que quieres mostrar final lo veo mucho más claro! y podré modificar todos los puntos del menú para poder listar las funciones que me faltaban y que el resultado se vea como quería  ;D

Le echaré un vistazo a Stringbuffer y StringBuilder como me recomiendas, ahora mismo estoy empezando y estoy viendo todo de nuevas jejej

Mil gracias por la ayuda!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con JOptionPane
Java
BEATMASTER 3 9,603 Último mensaje 2 Septiembre 2008, 01:52 am
por KaOs_NiGhT
[Ayuda] Mostrar pagina web en ventana
Java
Geormarsch 2 7,092 Último mensaje 25 Diciembre 2012, 13:43 pm
por Debci
ayuda a mostrar datos tabla
PHP
Fulgencia 4 1,235 Último mensaje 8 Julio 2013, 21:30 pm
por Fulgencia
AYUDA !! LLENAR DATOS DE UNA VENTANA
Programación Visual Basic
jonniemaxxx 7 2,243 Último mensaje 10 Junio 2014, 16:52 pm
por Miseryk
Mostrar mensaje en ventana C++
Programación C/C++
Kaxperday 4 2,603 Último mensaje 3 Noviembre 2015, 10:04 am
por class_OpenGL
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines