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:
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:
El código completo lo pueden descargar aquí.
Espero que les ayude
Interesante la información del blog.
no se que pasa pero a la hora de llamar no aparece la ventana y en la excepcion me dice at Principal.contribuyente.configurar(contribuyente.java:120)
le doy click y me lleva justo donde esta ubicado este codigo:
this.add(pnlFondo, BorderLayout.CENTER);
este le pongo en comentario y funciona pero no muestra la imagen..me pueden ayuda por fabor..gracias
Juanba,
No debe estar encontrando la imagen, verifica la ruta de la imagen, así como su nombre (incluida la extensión), poniendo especial atención en el tema de mayúsculas y minúsculas.
Saludos
Hola q tal apenas me estoy iniciando en la programacion de java con netbeans kiero agregar una imagen en un jlabel como le hago para ajustar el tamaño, lei algo y parece q la imagen tiene q ser .icon, agradeceria su ayuda por favor, gracias
Hello great website! Does running a blog similar to this
take a great deal of work? I have no understanding of programming but I had
been hoping to start my own blog in the near future.
Anyway, should you have any recommendations or tips for new blog owners please share.
I understand this is off subject nevertheless I just wanted to ask.
Appreciate it!
It’s hard to find educated people about this subject, but you seem like you know what you’re talking about!
Thanks
Amazing issues here. I’m very happy to peer your article. Thank you a lot and I’m taking a look forward to contact you.
Will you please drop me a e-mail?
no le entiendo nada