Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

Code Army Bolivia

5/3/10

Imagen de fondo en una aplicacion MDI en Java

JAN29

En un post anterior se explico la creacion de una sencilla aplicación MDI en java desde Netbeans, ahora tratando de dar un poco de personalizacion a la aplicacion, en este post se explica el codigo necesario para la incorporación de una imagen de fondo en un formulario MDI en java.

Se crea una nueva clase que implementa la clase abstracta "Border", en el constructor de la nueva clase "ImagenFondo.java" se declara la imagen que se utilizara como fondo, esta imagen se encuentra en el mismo paquete que el resto de las clases, se carga esta imagen en momoria haciendo uso de la clase BufferedImage, despues se sobreescriben todas funciones propias de la clase Border, y en el metodo paintBorder() se dibuja la imagen con drawimage.

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

Click para descargar

9 comentarios:

Anónimo dijo...

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

Unknown dijo...

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?

mouse dijo...

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

paulandrea dijo...

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

paulandrea dijo...

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.

Anónimo dijo...

muchas gracias, por fin funciona probe un monton de formas, gracias

Anónimo dijo...

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

MANTENIMIENTO dijo...

Que tamaño dimensiones debe tener la imagen y que formato debe estar, ya que no me reconoce algunas.
Gracias excelente pagina.

Anónimo dijo...

¡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!

Post recomendado