Hola a todos, hoy os explicare como podemos colocar iconos en aquellos componentes que permitan añadir una imagen.
En algunos componentes que ya hemos visto, podemos añadirle un icono para mejorar su aspecto, por ejemplo, a componentes JMenuItem, JLabel, JButton JFrame, etc.
No es necesario que conviertas la imagen a .ico, Java lo hará por nosotros, para el JFrame. Para otros componentes sera necesario que adaptes la imagen a tus necesidades, ya que sino aparecerá con su tamaño real.
La clase con la que manejaremos las imágenes es con ImageIcon(String) donde le pasaremos un String con la ruta de la imagen. En aquellos elementos que puedan contener un icono, suelen tener un constructor que incluye un parámetro de la clase Icon o Image.
Lo ideal es que cuando hacemos una aplicación que use imágenes, creamos una carpeta en el proyecto que contenga todas las imágenes usadas. Es importante saber que si queremos usar una ruta relativa, esta empieza desde la raíz del proyecto, no de la carpeta src.
Por ejemplo, si queremos acceder a una imagen en la carpeta imágenes de nuestro proyecto, le pasaremos «imagenes\imagen.jpg», como ya comentamos en otro post, como Java puede ser ejecutado en varias plataformas, lo recomendable es usar la contante separator de la clase File, quedándose así «imagenes»+File.separator+»imagen.jpg».
Le podemos cambiar en cualquier momento el icono a nuestro JFrame, con el método setIconImagen(«objeto IconImage».getImage()). Para los demás componentes, usaremos el método setIcon(Icon), le podemos pasar un objeto de ImageIcon.
Veamos un ejemplo, creamos una carpeta imágenes y metemos ahí dos imágenes (las que queramos):
import java.awt.EventQueue; import java.io.File; import javax.swing.*; public class EjemploIconos extends JFrame { private JPanel contentPane; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { EjemploIconos frame = new EjemploIconos(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public EjemploIconos() { //Parametros asociados a la ventana setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 750, 501); contentPane = new JPanel(); contentPane.setLayout(null); setContentPane(contentPane); //Creamos el objeto(JPG de cualquier tamaño) ImageIcon imagen1=new ImageIcon("imagenes"+File.separator+"Koala.jpg"); //El metodo necesita un objeto Image, invocamos el metodo getImage setIconImage(imagen1.getImage()); ImageIcon imagen2=new ImageIcon("imagenes"+File.separator+"open.png"); ImageIcon imagen3=new ImageIcon("imagenes"+File.separator+"menu.png"); //Creamos un menu y modificamos el icono JMenu menu=new JMenu("Archivo"); menu.setIcon(imagen3); //Añadimos un Submenu con una imagen en el constructor JMenuItem archivo=new JMenuItem("Abrir", imagen2); menu.add(archivo); JMenuBar barra=new JMenuBar(); setJMenuBar(barra); barra.add(menu); ImageIcon imagen4=new ImageIcon("imagenes"+File.separator+"+1google.png"); ImageIcon imagen5=new ImageIcon("imagenes"+File.separator+"play.png"); //Creamos una etiqueta, esta en lugar de imagen puede tener una imagen JLabel lblNewLabel = new JLabel(imagen4); lblNewLabel.setBounds(51, 54, 397, 186); contentPane.add(lblNewLabel); //Creamos un boton que tendra de fondo una imagen JButton btnNewButton = new JButton(imagen5); btnNewButton.setBounds(198, 304, 89, 23); contentPane.add(btnNewButton); } }
Así es como quedaría:
Os dejo un rar con las imágenes para probar el anterior código o puedes poner tu propias imagenes. Pincha aquí.
Por último, os recomiendo que reviséis el API de Java, para saber si acepta una imagen el componente.
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Gracias
me ha funcionado, pero quiero agregar dos imágenes por separado y no me ha salido, como se haría