Hola,
Tendrías que crear dos clases, un JPanel y un JFrame independientes.
En la clase Panel agregué un BufferedImage y el flag, en el constructor se lee el archivo del contenedor .JAR, y dentro del jar está la imágen (background.png), la imagen tiene que estar ubicada en el mismo directorio donde está esta clase. Si no quieres incluir el archivo en el contenedor .JAR, puedes usar el segundo método (el que está comentado) que lo lee de un archivo en el disco duro que pude estar en cualquier lugar (donde Java lo pueda encontrar
).
Código Java:
Ver originalpackage org;
// import's
private boolean flag = true;
try {
bi = ImageIO.read(getClass().getResource("/org/background.png"));
// bi = ImageIO.read(new File("C:\\background.png"));
System.
err.
println(ex.
toString()); }
initComponents();
}
@Override
public void paintComponent
(Graphics g
) { super.paintComponent(g);
if (flag && bi != null) {
g.drawImage(bi, 0, 0, this.getWidth(), this.getHeight(), null);
}
}
....
Dentro del mismo Panel agregas el botón JButton y lo colocas en cualquier lugar. Ademas dentro del ActionPerformed del botón agregas el flag.
Código Java:
Ver originalprivate void jButton1ActionPerformed
(java.
awt.
event.
ActionEvent evt
) { flag = !flag;
repaint();
}
Ahora creas la segunda clase 'Ventana' y agregas el Panel anterior adentro, primero compilas (generar) el proyecto en NetBeans y después arrastaras desde la paleta 'Proyectos', el icono de Panel.java sobre el JFrame Ventana que tienes abierto en el editor.
Dejo los 2 códigos para que puedas verlos detenidamente,
Panel.java
Código:
package org;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Panel extends javax.swing.JPanel {
private BufferedImage bi = null;
private boolean flag = true;
public Panel() {
try {
bi = ImageIO.read(getClass().getResource("/org/background.png"));
// bi = ImageIO.read(new File("C:\\background.png"));
} catch (IOException ex) {
System.err.println(ex.toString());
}
initComponents();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (flag && bi != null) {
g.drawImage(bi, 0, 0, this.getWidth(), this.getHeight(), null);
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(162, 162, 162)
.addComponent(jButton1)
.addContainerGap(165, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(134, 134, 134)
.addComponent(jButton1)
.addContainerGap(143, Short.MAX_VALUE))
);
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
flag = !flag;
repaint();
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration
}
Ventana.java
Código:
package org;
public class Ventana extends javax.swing.JFrame {
public Ventana() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
panel1 = new org.Panel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panel1, javax.swing.GroupLayout.DEFAULT_SIZE, 420, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panel1, javax.swing.GroupLayout.DEFAULT_SIZE, 322, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Ventana().setVisible(true);
}
});
}
// Variables declaration - do not modify
private org.Panel panel1;
// End of variables declaration
}
De esta forma puedes tener una imágen de fondo y poner los controles sobre el Panel usando 'GroupLayout'. Ya está probado.
Saludos,