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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  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 4,420 veces)
rubia28

Desconectado Desconectado

Mensajes: 17


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: 1.008



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: 17


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] Mostrar pagina web en ventana
Java
Geormarsch 2 8,837 Último mensaje 25 Diciembre 2012, 13:43 pm
por Debci
ayuda a mostrar datos tabla
PHP
General Dmitry Vergadoski 4 2,397 Último mensaje 8 Julio 2013, 21:30 pm
por General Dmitry Vergadoski
AYUDA !! LLENAR DATOS DE UNA VENTANA
Programación Visual Basic
jonniemaxxx 7 3,788 Último mensaje 10 Junio 2014, 16:52 pm
por Miseryk
Mostrar mensaje en ventana C++
Programación C/C++
Kaxperday 4 4,733 Último mensaje 3 Noviembre 2015, 10:04 am
por class_OpenGL
Mostrar los datos de un treeview en otra ventana...
Scripting
El mas antiguo 0 4,709 Último mensaje 12 Marzo 2022, 00:13 am
por El mas antiguo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines