martes, 29 de enero de 2013

Mostrar Imagenes en Java Parte I

Cuando quieres cargar imagenes en Java existen varios Clases que haran esa tarea por ti pero el problema que a mi como desarrollador se me presento era que las imagenes se veian en el IDE en este caso Eclipse o NetBeans pero al momento de exportar mi programa a JAR (mismo que haya colocado la ubicacion de las imagenes enel Path relativo) no aparecian las imagenes :'( asi que despues de buscar muuuuuuchooo en las WEBS encontre la forma de hacerlo!!!!
Eso es lo que te voy a enseñar ahora....

1º paso .- Vamos a crear una carpeta que aloje nuestras imagenes dentro de nuestro proyecto asi...
En Eclipse abrimos nuestro proyecto, boton derecho sobre SRC, nos vamos a new y elegimos folder


2º paso.- Con nuestra nueva carpeta creada (en mi caso la llame img) le damos click derecho y elegimos la opcion de import, cuando se abra una ventana le damos a FileSystem y le damos a next aca las imagenes....





Luego le damos a Buscar, encontramos en nuestro disco duro la carpeta que contiene nuestras imagenes y le damos a abrir o seleccionar.
 Nos aparecera una ventana con todas las imagenes que tenemos dentro nuestra carpeta, elegimos las que queramos importar y le damos a Finish...


Hecho!!! ahora puedes ver que dentro de la carpeta que te creaste en tu proyecto estan las imagenes que quieres usar!!!




Listo ahora a usar nuestras imagenes con el siguiente codigo....



import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.io.IOException;
import java.io.InputStream;
import java.awt.Image;


import javax.imageio.ImageIO;
import javax.swing.*;


public class imagenes extends JFrame{
      Image imagen1,imagen2,imagen3; //declaro 3 variables del tipo iamgen
      InputStream imgStream;
     
      public imagenes(){
            super("Imagenes");
            this.setSize(250, 400);
        this.setVisible(true);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
        cargaImagen();
        repaint();
      }
      public void cargaImagen(){
           
            try {
                  imgStream = imagenes.class.getResourceAsStream("img/7.png");//el path debe ser directo img es mi directorio
                  imagen1 = ImageIO.read(imgStream);
                  imgStream = imagenes.class.getResourceAsStream("img/0.png");
                  imagen2 = ImageIO.read(imgStream);
                  imgStream = imagenes.class.getResourceAsStream("img/9.png");
                  imagen3 = ImageIO.read(imgStream);
            } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }
      }
      public static void main(String[]arg){
            new imagenes();
      }
      public void paint(Graphics g)
      {
            Graphics g2 = (Graphics2D)g;
            g2.setColor(Color.black);
            g2.fillRect(0, 0, 250, 400);//creo un triangulo negro del tamaño de la ventana para fondo
            g2.drawImage(imagen1, 100, 50, 70, 70, null);//dibujo la imagen x, y, tamaño vertical y horizontal
            g2.drawImage(imagen2, 100, 150, 70, 70, null);
            g2.drawImage(imagen3, 100, 230, 70, 70, null);
      }
     

}




Este es el resultado con mis imagenes...


Ahora lo bueno de esto es que si te creas un JAR (un ejecutable de JAVA) las imagenes estaran dentro de ese ejecutable!!!


11 comentarios:

  1. hola que tal estoy tratando de realizar el mismo programa en netbeans pero me marca errores

    Exception in thread "main" java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(ImageIO.java:1348)
    at cargar.imagenes.imagenes.cargaImagen(imagenes.java:43)
    at cargar.imagenes.imagenes.(imagenes.java:36)
    at cargar.imagenes.imagenes.main(imagenes.java:54)

    ResponderEliminar
    Respuestas
    1. Fíjate en la ubicación de tus imágenes y que no te falte ninguna imagen, fue mi solución al mismo error

      Eliminar
    2. Mira si la carpeta no esta dentro de la carpeta donde se aloja tu codigo debes subir un nivel asi..
      imgStream = Principal.class.getResourceAsStream("../images/detective.png");
      De cualquier modo te recomiendo infinitamente que crees la carpeta de tus imagenes dentro
      de la carpeta donde se encuentra tu codigo

      Eliminar
  2. Cuando trato de pegar una imagen directa o importar un archivo con una imagen en la imagen me aparece esto ("imagen.jpg") pero el icono de la imagen me aparece como el icono de una nota(.txt), no me aparece el icono y no puedo usar imagenes para mis programas, que debo hace?

    ResponderEliminar
  3. Si quiesiera poner una carpeta destino sin importar en el proyecto, ¿cómo tendría que definir la ruta?
    imgStream = imagen.class.getResourceAsStream("C:/Users/yo/Desktop/PFC/datos/histologia/s02a01x2.5.jpg");

    Así me está dando error.

    ResponderEliminar
    Respuestas
    1. Poner una carpeta distinta te funcionara solo en tu computador pq cuando lo lleves a otro la ruta de la imagen no existira, haslo de la forma q muestro para que tu programa sea full portable

      Eliminar
  4. Saludos.

    Primero felicitarte por el blog esta excelente.

    Si podrías mostrar un ejemplo de un disparo a traves de la barra espaciadora, estoy elaborando un juego en base a tus tutores de las lecciones y me quede en el disparo.

    gracias.

    ResponderEliminar
  5. Saludos.

    Primero felicitarte por el blog esta excelente.

    Si podrias mostrar un ejemplo de un disparo a traves de la barra espaciadora, estoy elborando un juego en base a tus tutores de las lecciones y me quede en el disparo.

    gracias.

    ResponderEliminar
  6. tio te lo agradezco muchisimo .....muchisimas horas intentando cargar una imagen que ya me salian ojeras de estar prendido en la pc visite cuanto foro y video de youtube pero nada hasta que vi esta pagina ..se agradece el aporte :)

    ResponderEliminar
  7. deberias mostrar la GUI para saber su estructura

    ResponderEliminar