JDialog con imagen de fondo

Luego de varias preguntas relacionadas al tema (ubicar una imagen de fondo a un JDialog) me puse a trabajar en el tema y les presento una solución, la misma que sigue lo explicado en el post JFrame con Imagen de Fondo.

El proyecto está estructurado como muestra la imagen a continuación:

Imagen con la estructura del proyecto en NetBeans
Imagen con la estructura del proyecto en NetBeans

La descripción de la misma es la siguiente:

  • El JFrame – FrmPrincipal.java tiene un botón cuya función es mostrar el JDialog.
  • El JDialog – JDiFondo.java, muestra un JPanel
  • Un JPanel – PnlFondoJDialog.java, que muestra la imagen y un botón.

Veamos el código más importante de cada uno de los elementos, empecemos por el JFrame –  FrmPrincipal.java

public class FrmPrincipal extends javax.swing.JFrame {
   /** Creates new form FrmPrincipal */
   public FrmPrincipal() {
      initComponents();
   }

   private void btnMostrarActionPerformed(java.awt.event.ActionEvent evt) {
      int ancho = 300;
      int alto = 300;
      JDiFondo jdiFondo = new JDiFondo(this, true);
      jdiFondo.setSize(ancho, alto);
      jdiFondo.setPreferredSize(new Dimension(ancho, alto));
      jdiFondo.configurar();
      jdiFondo.setVisible(true);
   }
   ...
}

Usamos setSize y jdiFondo.setPreferredSize, el primero nos permite que la imagen y la ventana del JDialog tengan el mismo tamaño, también se invoca la método configurar del JDialog que lo explicaremos más adelante.

Ahora veremos el JDialog – JDiFondo.java

public class JDiFondo extends javax.swing.JDialog {
   /** Creates new form JDiFondo */
   public JDiFondo(java.awt.Frame parent, boolean modal) {
      super(parent, modal);
      initComponents();
   }

   public void configurar(){
      PnlFondoJDialog pnlFondo = new PnlFondoJDialog();
      pnlFondo.setSize(this.getSize());
      this.add(pnlFondo, BorderLayout.CENTER);
      this.pack();
   }
   ...
}

Lo que debemos destacar de está clase es el método configurar, que no existía cuando trabajamos en el post anterior (ubicar la imagen en un JFrame – JFrame con Imagen de Fondo) es necesario éste método por que si ubicamos sus líneas de código en el constructor el panel toma la medida por defecto del JDialog ya que hasta ese momento no le asignamos un tamaño al JDialog (Ver el método btnMostrarActionPerformed del JFrame).

Finalmente el JPanel – PnlFondoJDialog.java este no ha cambiado y sigue el mismo principio que se mencionó en el post: JFrame con Imagen de Fondo.

public class PnlFondoJDialog extends javax.swing.JPanel {
   /** Creates new form PnlFondo */
   public PnlFondoJDialog() {
      initComponents();
   }

   @Override
   public void paintComponent(Graphics g){
      Dimension tamanio = getSize();
      ImageIcon imagenFondo = new ImageIcon(getClass().
      getResource("/los/imagen/DSC00857.jpg"));
      g.drawImage(imagenFondo.getImage(), 0, 0,
      tamanio.width, tamanio.height, null);
      setOpaque(false);
      super.paintComponent(g);
   }
   ...
}

El resultado final lo pueden ver en la siguiente imagen:

Ejemplo de un JDialog con imagen de Fondo
El resultado final

El código completo lo pueden descargar aquí.

Espero que les ayude

JFrame con Imagen de Fondo

El día de ayer, revisando los proyectos de mis alumnos de Segundo Ciclo, me hicieron la pregunta ¿cómo puedo colocar una imagen de fondo en un JFrame? Y para ser sinceros era la primera vez que me enfrentaba a una tarea como esa, luego de una pequeña consulta en Internet encontré un código que me ayudó a responder la pregunta y comparto con todos la solución que planteé a la pregunta. Dedicado a mis alumnos de Segundo Ciclo de Ingeniería en Sistemas Informáticos y computación de la UTPL

Lo primero que hice es crear un paquete en donde ubicaré las imagenes, ésto nos ayuda a no utilizar rutas absolutas, las mismas que traen complicaciones cuando no se respeta los directorios por defecto, mientras que si la imagen es parte de paquete es parte de la aplicación y es independiente de la instalación del programa.

Luego debemos crear un JPanel que contendrá la imagen, un campo de texto, un campo para password y un botón. Dentro del JPanel debemos re-escribir el método paintComponent en donde utilizando el método g.drawImage se dibuja la imagen. Para hacer referencia a la imagen que se encuentra dentro de un paquete lo hacemos con el método getResource, éste mismo método es utilizado para agregar una imagen al botón.

pnlfondo.png

Una vez hecho los trabajos con el JPanel, debemos empezar a trabajar con el JFrame, únicamente lo que corresponde hacer es crear un objeto del tipo JPanel (en mi caso la clase PnlFondo) y agregarlo al JFrame dentro del cual se ha definido con Layout el BorderLayout.

Finalmente comentarles que la fotografía de fondo muestra una construcción que se conoce como Ingapirca, es una construcción Incaica, en donde se desarrollaba las festividades al dios sol.

Si lo que necesitan es poner una imagen a un JDialog, revisen este post.

Pueden revisar el código en GitHub en el siguiente link.

Powered by ScribeFire.