Imagen de fondo en Java – JFrame

Java JFrame

Ya entiendo, has llegado aqui por que estas empezando a crear interfaces gŕaficas en Java JFrame y  las ventanas de tus proyectos se ven algo sosas… No soy ningun experto (en realidad si) pero creo que te están pidiendo una imagen de fondo a gritos. En este manual te voy a enseñar una manera muy sencilla de poder incluir Imagen de fondo en Java – JFrame .

Para este tutorial vamos a trabajar con Eclipse IDE, espero que te sirva, comencemos:

Lo primero que debemos hacer es crear un proyecto Java nuevo : File – New – Java Proyect. Le llamaremos ImangenDeFondo

1

Una vez creado el proyecto nos situamos sobre él en el PackageExplorer y creamos un nuevo Package en el que guardaremos las imágenes para nuestros fondos: Pulsando botón derecho sobre el paquete ImagenDeFondo – New – Package. Le llamaremos Imágenes.

1.2

Lo siguiente será crear dentro del proyecto una nueva  clase  heredada de JPanel.

2.1

En esta clase redefinimos el método paintComponent con la intención de poder crear nuestros propios JPanel personalizados con una imagen de fondo. A esta clase la llamaremos  PanelImagen y su código será el siguiente.

Source   
  1. import java.awt.Dimension;
  2. import java.awt.Graphics;
  3. import javax.swing.ImageIcon;
  4. public class PanelImagen extends javax.swing.JPanel {
  5. public PanelImagen(){
  6. this.setSize(400,280);
  7. }
  8. @Override
  9. public void paintComponent (Graphics g){
  10. Dimension tamanio = getSize();
  11. ImageIcon imagenFondo = new ImageIcon(getClass().getResource("/imagenes/Koala.jpg"));
  12. g.drawImage(imagenFondo.getImage(),0,0,tamanio.width, tamanio.height, null);
  13. setOpaque(false);
  14. super.paintComponent(g);
  15. }
  16. }

En esta linea indicamos la ruta en la que se encuentra la imagen dentro de nuestro proyecto:

ImageIcon imagenFondo = new ImageIcon(getClass().getResource(“/imagenes/Koala.jpg”));

Ahora vamos a crear dentro de nuestro proyecto una nueva clase (New – Other – JFrame) en la que utilizaremos el JPanel que hemos creado para añadir un fondo al JFrame, le llamaremos JFrameConFondo.

3.1

Lo que haremos será crear un objeto de la clase PanelImagen y lo definiremos como fondo del JFrame.

El código de esta clase será el siguiente:

Source   
  1. import java.awt.BorderLayout;
  2. import java.awt.EventQueue;
  3. import javax.swing.JFrame;
  4. import javax.swing.JPanel;
  5. import javax.swing.border.EmptyBorder;
  6. public class JFrameConFondo extends JFrame {
  7. public static void main(String[] args) {
  8. EventQueue.invokeLater(new Runnable() {
  9. public void run() {
  10. try {
  11. JFrameConFondo frame = new JFrameConFondo();
  12. frame.setVisible(true);
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. }
  16. }
  17. });
  18. }
  19. public JFrameConFondo() {
  20. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  21. setBounds(100, 100, 450, 300);
  22. PanelImagen p = new PanelImagen();
  23. p.setBorder(new EmptyBorder(5, 5, 5, 5));
  24. p.setLayout(new BorderLayout(0, 0));
  25. setContentPane(p);
  26. }
  27. }

Ahora nuestro Java JFrame tendrá como fondo un bonito Koala.

4

Después de esto ya podréis crear tantos Java JFrame “JPanels con imagen” como fondos diferentes necesitéis en vuestros proyectos.

14 comentarios

  • Ya lo revise bien y cuando lo corro me dice esto en la consola:
    Error: Could not find or load main class prueva.PruevaImagenes3

    prueva es el paquete y PruevaImagenes3 es la segunda ventana que isiste.
    Gracias de ante mano.

  • Alejandro Casas

    Hola Brandon, perdón por tardar tanto en responder a tu comentario, la vacaiones me tienen alejado del blog.

    He revisado el código y funciona correctamente. Asegurate de que al crear las clases lo haces de la siguiente forma: New – Other – JFrame en vez de New – Class y que la clase que ejecutas es la segunda, en tu caso “PruevaImagenes3”, que es la la que contiene el main.

    Un saludo.

  • como puedo aser para que me salgan 2 imagenes

  • Alejandro Casas

    Hola, para añadir otra imagen puedes hacerlo de la siguiente manera, siguiendo con el código del artículo, deberías crear una nueva clase similar a PanelImagen, por ejemplo PanelImagen2 y en ella seleccionar una nueva imagen en esta linea:

    ImageIcon imagenFondo = new ImageIcon(getClass().getResource(“/imagenes/kanguro.jpg”));

    Después en la clase JFrameConFondo, crear un nuevo objeto de la clase PanelImagen2 y ajustar las posiciones y medidas de ambas imagenes a tu gusto.

    Por ejemplo así

    // objeto de la clase PanelImagen con la foto del koala

    PanelImagen p = new PanelImagen();
    p.setBounds(10, 101, 247, 218);
    frame.getContentPane().add( p , BorderLayout.CENTER);
    p.setLayout(null);

    // objeto de la clase PanelImagen2 con la nueva imagen de un kanguro

    PanelImagen2 p2 = new PaneIImagen2();
    p2.setBounds(278, 101, 236, 218);
    frame.getContentPane().add(p2, BorderLayout.CENTER);
    p2.setLayout(null);

    Saludos.

  • y si kiero q muestre txt encima de la imagen??

  • Como le agrego el fondo a una clase ya creada?
    ya tengo una aplicacion creada, y nose como agregarle solo el fondo?

  • Hola, probé el código y funciona perfecto pero tengo el inconveniente que si agrego un boton al frame, este no se ve. Gracias.

    • Lo que hice fue crear una clase desde el JFrame, para poder trabajar con los componentes Swing de forma gráfica.
      Esta parte la añadí en el constructor
      PanelImagen p = new PanelImagen();
      p.setBorder(new EmptyBorder(5, 5, 5, 5));
      p.setLayout(new BorderLayout(0, 0));
      setContentPane(p);

  • De cuanto tiene que ser el tamaño de la imagen mi estimado para poder ponerlo en el jframe ?

  • Disculpa estoy haciendo un proyecto en mi escuela donde tenemos que generar el juego de la Tortuga y la Liebre pero con una interfaz grafica debe llevar un fondo y la imagen de la liebre y la tortuga y simular la carrera entre ellas y eh seguido tus pasos para insertar primero la imagen de fondo pero no me muestra la imagen y leyendo los comentarios encontre que le dices a una persona que : lo ponga en New – Other – JFrame en vez de New – Class pero como pongo el New – Other – JFrame en Bluej ? me podrias ayudar ?

  • Muchas gracias por el codigo! Funciona de puta madre! Llevava horas intentandolo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *