import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.border.Border;
/**
* @web http://jc-mouse.blogspot.com/
* @author Mouse
*/
public class ImagenFondo implements Border {
BufferedImage fondo;
public ImagenFondo(){
try {
//se obtiene la imagen
URL url = new URL(getClass().getResource("/mdijava/picmouse.jpg").toString());
fondo = ImageIO.read(url);
} catch (IOException ex) {
Logger.getLogger(ImagenFondo.class.getName()).log(Level.SEVERE, null, ex);
}
}
// se sobreescriben metodos propios de Border
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height){
//se dibuja la imagen de fondo en el centro del contenedor
//cada que se redimensione el contenedor, la imagen automaticamente se posiciona en el centro
g.drawImage(fondo, (x + (width - fondo.getWidth())/2),(y + (height - fondo.getHeight())/2), null);
}
public Insets getBorderInsets(Component c){
return new Insets(0,0,0,0);
}
public boolean isBorderOpaque(){
return true;
}
}
La implementacion de esta clase en la aplicacion en Netbeans se realiza de la siguiente manera:
public papa() {
initComponents();
jDesktopPane1.setBorder(new ImagenFondo());
}
Donde papa(), es el nombre del constructor de la clase JFrame que hace de formulario padre para los demas JInternalFrame (Formularios hijos), JDesktopPane es el contenedor para los formularios hijos, y es ahi donde se implementa la clase "imagenFondo,java", añadiendole a su propiedad "Border" la nueva clase creada.
El codigo de ejemplo en el siguiente enlace
9 comentarios:
Tu aporte me fue de mucha utilidad, es una magifica tecnica y la manera en la que te comunicas es muy entendible. Muchas gracias desde Pachuca Hgo.
Saludos y felicidades por tu enzeñar
que tal jc-mouse, antes que nada estoy agradecido por tus aportaciones al area de la programacion y sin mentirte me han apoyado mucho, pero tengo una duda en esta publicacion http://jc-mouse.blogspot.mx/2010/03/imagen-de-fondo-en-una-aplicacion-mdi.html
ya que hice exactamente lo que describes, y a la hora de compilar y ejecutar corre excelente pero a la hora de hacer el .jar aun jalando la carpeta de src no carga ni el jframe... solo se queda en mi login "le escribo el usuario y contraseña y cuando doy 'accesar' no carga el frame", al menos que le quite la instancia en el constructor del frame es que jala... tienes alguna idea de que `pudiera ser?
que extraño, pero como dices al compilar no existe error entonces fijate en el tamaño de la imagen o en la ruta del archivo imagen, la carpeta SRC no tiene nada que ver al compilar el proyecto, todo se guarda en la carpeta DIST
Tengo una duda, a esa variable tipo URL le puedo escribir una ruta como C:/imagen.jpg ? O debe estar en la carpeta del proyecto?
Gracias
Tengo una pregunta, a la variable tipo URL le puedo enviar cualquier ruta? ej. C:/imagen.jpg ??
O debe estar en la carpeta del proyecto?
Gracias.
muchas gracias, por fin funciona probe un monton de formas, gracias
Disculpe a mi me marca Error a la hora de ejecucion, es decir en la linea de ;
Escritorio.setBorder(new ImagenFondo());
que se encuentra en el constructor de la clase y en el metodo run
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Inicio().setVisible(true);
}
});
¿A que se debe?¿Como puedo solucionarlo? De antemano GRACIAS
Que tamaño dimensiones debe tener la imagen y que formato debe estar, ya que no me reconoce algunas.
Gracias excelente pagina.
¡Excelenteeeeeeeee!
Vi muchos tutoriales, pero no me quedaba o simplemente terminaba por confundirme. Pero este post me ha ayudado demasiado. Más claro que el agua. ¡Gracias!
Publicar un comentario