Noticias

* Completa este formulario para conocer los temas de tu interes, te tomará unos segundos.
* Nuevos temas en CAKEPHP
* Ahora puedes bajar los proyectos finalizados!
* Sigue a la página para seguir creciendo!!

domingo, 27 de noviembre de 2011

Java: JOptionPane: Colocar iconos personalizados

23 comentarios :
Introducción

Cuando se programa cada quién quiere darle su "toque" personal a su aplicación, en entradas anteriores hemos visto como utilizar ventanas de diálogo de la libería de java JOptionPane, hoy veremos como personalizar el icono de estas con alguna imagen que nosotros queramos utilizar.

Desarrollo

Para colocar iconos, ya sean animados o no, en nuestros ventanas de JOptionPane (algunas no lo aceptan), se importan las librerías Icon e ImageIcon, las líneas para esto se presentan a continuación:

import javax.swing.Icon;
import javax.swing.ImageIcon;

Una vez que los importamos procedemos a inicializar nuestro icono:

Icon icono = new ImageIcon(getClass().getResource("ruta local de la imagen"));

La sentencia anterior se descompone en los siguientes elementos:
 - Nuestro Icon que lo importamos anteriormente
 - el nombre de nuestro objeto
 - new, para la creación de nuevo objeto en la instancia
 - ImageIcon que lo habíamos importado anteriormente
 - la ruta completa de la imagen, esta va entre comillas y con la extensión de la imagen: gift, png entre otras, esto es para que el programa sepa donde ir a buscar la imagen.

Luego para utilizar a nuestra imagen en diversos tipos de ventanas se utilizaría el siguiente código:

showMessageDialog:

JOptionPane.showMessageDialog(null," Aprendiendo a poner imagenes ", "Imagen Java", JOptionPane.PLAIN_MESSAGE, icono);

showOptionDialog:

JOptionPane.showOptionDialog(null, "¿Queres salir a Bailar esta Noche?","Sita", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, icono, botones, botones[0]); 

showInputDialog (JCombox):

Object opcion = JOptionPane.showInputDialog(null,"Selecciona un color", "Elegir",JOptionPane.QUESTION_MESSAGE, icono ,colores, colores[0]); 

showConfirmDialog:

JOptionPane.showConfirmDialog(null, "Realmente desea salir de Hola Swing?", "Confirmar salida", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, icono);

En el caso del JCombox y en el caso del OptionDialog si no se va a poner un icono se coloca un null.

Conclusiones

Colocar iconos personalizados es sumamente sencillo y puede dar un aspecto más profesional a nuestra aplicación.

No es bueno colocar imágenes muy grandes debido a que la ventana en sí es pequeña, ni tampoco es bueno colocar imágenes que distraigan al usuario (como animaciones y demás).

23 comentarios :

  1. Tio, sos mi heroe ! Gracias ! thanks ! arigatou ! xie xie !

    ResponderEliminar
  2. xvr men!! solo para ajustar el detalle para los que no saben aun: Icon icono = new ImageIcon("ruta de la imagen");
    tiene que ser la ruta absoluta x ejemplo: "C:\Users\jsanchez\Desktop\topgun1\src\imagenes" o crearse una funcion que inicialice tu imagen tomandola de tu carpeta del proyecto.

    ResponderEliminar
    Respuestas
    1. que funcion seria para tomar la imagen dese el pryecto.. porq si kiero movilizarme con el proyecto la imagen ya no saldria

      Eliminar
    2. Si la imagen está en el proyecto solo tienes que especificar la ruta local: Ejemplo:

      La carpeta miProyecto tiene varias carpetas dentro que serian: src , bin, que son las de un proyecto normal y agregamos la carpeta "images"

      miProyecto tendría tres carpetas (src, bin, images), si mi imagen se llama patito.png y está dentro de mi carpeta images (miProyecto/images/)

      para asignar la ruta de mi imagen se puede hacer de dos formas (porque algunas veces le da que no la reconoce):

      1. miProyecto/images/patito.png
      2. images/patito.png

      El método sería el mismo que que describió Jean:

      Icon icono = new ImageIcon("ruta de la imagen");

      ahora cuando movilices tu proyecto la imagen irá dentro de este por ende va a reconocer la imagen

      Atte: Fran..!!

      Eliminar
  3. Podrias poner un ejmplo con imagen de showInputDialog ya que no me queda muy claro !!gracias

    ResponderEliminar
    Respuestas
    1. Mira este tema. en el se explica bien todo:
      http://franvarvil.blogspot.com/2011/11/menu-en-joptionpane-jcombox.html

      Eliminar
  4. Amigo con todo respeto, no me funciona con el input ni por el hpta, muestra como leer una variable entera o double por favor

    ResponderEliminar
  5. hey amigo no abria una manera de que lo hicieras con pantallazos? la verdad soy muy novato y le intento muchas veces y no me sale :/

    ResponderEliminar
    Respuestas
    1. Hola amigo, pantallazos de que manera? del código o de la forma en que se van a ver?

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
  6. bro, tengo otra duda XD, cuando hago un ejecutable del programa y lo paso a otro pc, la imagen no se ve, que hago?

    ResponderEliminar
    Respuestas
    1. Como agregas la imagen? y añades la imagen como recurso cuando creas el ejecutable?

      Eliminar
  7. Intenré poner la ruta de la imagen en mi computador así:
    C:\Users\Juan Pablo\Desktop\logo.PNG
    Pero no me funciona, como es posible hacer que funcione??

    ResponderEliminar
    Respuestas
    1. Use una ruta relativa porque si cambia de pc su ruta no funcionará. Una forma fea de hacerlo es colocar la imagen con los .class entonces solo llamas a la imagen, una más formal de hacerlo es crear una capeta imagenes dentro de la capeta principal del proyecto y dar la ruta: carpetaImagenes/imagen.extención o si no resulta así colocan un / antes quedando así: /carpetaImagenes/imagen.extención

      Eliminar
  8. Importe como dijiste, luego lo siguiente:
    Icon icono = new ImageIcon("/Imagenes/cubos.png");

    Luego lo posterior:
    JOptionPane.showMessageDialog(null," Aprendiendo a poner imagenes ", "Imagen Java", JOptionPane.PLAIN_MESSAGE, icono);

    pero no me manda la imagen estan en el paquete Imagenes pero no tiene subcarpeta porque no la muestra podrias decirme porfavor.

    ResponderEliminar
    Respuestas
    1. Hola, prueba quitando el primer "/" de la ruta, si no sirve verifica bien la extención, algunas veces vienen en mayuscula o así.

      Eliminar
  9. Esto funciona desde el proyecto:
    Icon icon = new ImageIcon(ClassLoader.getSystemResource("Imagenes/Nombre.png"));

    ResponderEliminar
    Respuestas
    1. Y creo que también esto: Icon icon = new ImageIcon("src/Imagenes/Nombre.png");

      Eliminar