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

1/12/09

JFrame con imagen de fondo en Netbeans

JAN29

Respondiendo un mail que me llego a mi correo que me hacia la pregunta de como colocar una imagen dentro de JFrame, me puse a investigar un poco por "san google" y de los muchos ejemplos que encontre que decian que servian no eran del todo claros y menos te daban todo el codigo, asi que hice un ejemplo completo para todos me incluyo porque talves me sirva en el futuro. Asi que aqui esta.

Paso 1: crea un nuevo proyecto con netbeans y agrega un nuevo JFrame, para este ejemplo, llamalo "forma" (luego puedes darle el nombre que quieras).

Paso 2: Agrega un nuevo "paquete de imagenes" y añade una imagen, sino sabes como date una vuelta por aqui "Paquete de imagenes en Java y Netbeans", la imagen de ejemplo para este tutorial es "la casa de la libertad" nombre del archivo "casalibertad.jpg".
Paso 3: Crea una nueva clase, llamala "mipanel.java", hasta ahora debes tener algo como esto:
las que estan tachadas no importan, ya las tenia de un proyecto anterior, asi que ignoralas.
continuemos...

Paso 4:  en la clase mipanel.java, coloca el codigo


package contactos;

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;

/**
 * http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class mipanel extends javax.swing.JPanel {

    public mipanel(){    
        this.setSize(400,280);
    }
        
    @Override
    public void paint(Graphics g){
        Dimension tamanio = getSize();
        ImageIcon imagenFondo = new ImageIcon(getClass().getResource("/imagenes/casalibertad.jpg"));        
        g.drawImage(imagenFondo.getImage(),0,0,tamanio.width, tamanio.height, null);        
        setOpaque(false);
        super.paintComponent(g);
}
    
}

Explicacion necesaria: lo que hacemos es crear un JPanel propio, al cual le sobreescribimos el metodo paint() y especificamos la direccion de nuestra imagen, al estar nuestra imagen en un paquete de nuestro proyecto, no necesitamos utilizar una direccion absoluta, sino al contrario usamos getResource para obtener el recurso que ya tenemos empaquetado, del mismo modo en el constructor de nuestra clase mi panel, especificamos el tamaño de la imagen.

Paso 5:
ahora en nuestro JFrame que creamos (forma.java), haremos uso de import java.awt.BorderLayout; ya debes saber donde colocarlo, a nuestra jframe le añadimos el evento WindowOpened y colocamos el codigo de abajo


private void formWindowOpened(java.awt.event.WindowEvent evt) {
        mipanel p = new mipanel();
        this.add( p , BorderLayout.CENTER);
        p.repaint();
    }


y eso es todo, ejecuta el proyecto y ya.
el jFrame solamente con imagen de fondo
el jFrame con la imagen y otros objetos

27 comentarios:

descobar0989 dijo...

Mi estimado, me aparece que el metodo formWindowOpened no esta en uso, que onda como se arregla eso?

Unknown dijo...

hola como estas si es verdad inicialmente te sale que el metodo no esta en uso....lo estube revisando y en el constructor le agregue el evento y se ejcuto
asi...
public forma() {
initComponents();
setSize(600,500);
setTitle("Easy_Class");
formWindowOpened(null);

}

Cramos dijo...

Hola muy buen aporte, pero tengo un problema, al ver la aplicacion me sale bien la imagen pero los botones y componentes adicionales salen si les paso el mause, sabes del por ke? espero tu ayuda y gracias

jc mouse dijo...

DREG: no es regla que coloques el codigo ahi, bien puede colocarlo en el constructor como dijo Darwin

NeoZerg:
la linea de codigo que dice:
public void paint(Graphics g)
lo reemplazas por
public void paintComponent(Graphics g)
y asunto arreglado

o mejor bajate el componente jcmousepanel que hice para que puedas utilizarlo mas facilmente desde tu ide , aqui el enlace

http://jc-mouse.blogspot.com/2010/10/swing-jcmousepanel-imagen-degradado.html

Anónimo dijo...

Con respeto, no des por sentado que sabes todo, como lo de: "haremos uso de import java.awt.BorderLayout; ya debes saber donde colocarlo", porque hay algunos que recien empezamos, sabes!!!!!
Si vas a hacer las cosas hacelas bien infeliz, si no no las hagas..

Franz Velarde Ruiz dijo...

mejor porque no trabajas con PANEL CON CAPAS... arrastras uno y le pegas un label y luego otro en otro lado pero dentro le pones los botones y jtextfields....
despues arrastras el segundo sobre el primero....
en fin.. para ver el resultado ejecutas y q tal t queda,,,
SALUDOS DESDE PERÚ...

Anónimo dijo...

MI HERMANO GRAX POR TODOS ESTOS APORTES ESTA MUY BUENA TU PAGINA

CaoS dijo...

muy buena, pero tengo una inquietud, tu sabes o podrias explicar lo mismo pero con imagenes random?

Anónimo dijo...

Hola jc-mouse muchas gracias por tu ayuda tus programas me han apoyado mucho, cuidate

Osmany dijo...

Me pudieran explicar como puedo poner encima de la imagen de fondo, una imagen que actue como un boton, o sea que haga un evento cuando le den click.

Mouse dijo...

Osmany lo más facil es utilizat un JLabel y su evento on_Click

EdadPema dijo...

mi pregunta es si tengo varios Jframes y les quiero poner una imagen de fondo. ¿Debo crear un JPanel por cada JFrame al que le quiero agregar la imagen de fondo?

Anónimo dijo...

Primero que todo gracias por los aportes que ha hecho JC mouse, he logrado hacer muchas aplicaciones gracias a este blog. Tengo una inquietud con respecto a insertar la imagen en un Frame, tengo una aplicacion que con un botón abre un JFrame el cual deberia cargar la imagen, el Jframe carga la imagen pero el Jframe sale minimizado y aparte me sale un error de "Exception in thread" quiciera saber si al utilizar sunstance puede ser un problema o no se porque ocurre esto, gracias por la pronta respuesta.

Anónimo dijo...

....buenos, primero que todo buenas tardes, como estan.....la verdad a mi me sirvio de mucho este tutorial, y bueno se ejecuta bien en el netbeans, pero cuando voy a crear un instalador del programa desarrollado, entonces ya no me sale la imagen....estube mirando y el problema radica en la clase "mipanel" en la linea ImageIcon imagenFondo = new ImageIcon(getClass().getResource("/imagenes/casalibertad.jpg")); pues esa linea de codigo se ejecuta bien en el netbeans.....pero el el instalador toca modificar esa linea por ImageIcon imagenFondo = new ImageIcon("casalibertad.jpg"); y simplememte la imagen se guarda en la carpeta en donde se guarda en la carpeta del proyecto y hay tambien se ejecuta bien para netbeans, como tambien para el instalador.

Mouse dijo...

bueno ese depende de la estructura de tu JAR. si colocas tus imagenes en la raiz de tu proyecto, claro que lo llamaras de la forma "imagen.jpg".

Isabel dijo...

Gracias me sirvió de mucho el código y las preguntas. Ahora quiero saber como hago para que la imagen tome automáticamente el tamaño del formulario??

jc mouse dijo...

tienes que redimensionar la imagen antes de colocarla en el control, te aconsejo que te bajes el componente swing jcmousepanel en su ultima version

El Mazateco.com dijo...

muchas gracias amigo. buen apporte, habia venido buscando esta información y a como lo explicas esta muy sencillo. Te lo agradezco de corazon me ha servido de mucho. Dios te bendiga.

Anónimo dijo...

me ayudo mucho cunado lo corro con f6 en netbeans todo bien pero cuando creo el .jar en la dist no se creo bien no sale la pantalla y el problema si es la clase pero no se xq pasa eso intente lo que dic un anonimo mas arriba pero no me sirvio si sabes como debo construir el proyecto de forma mas eficiente te lo agradesco

Anónimo dijo...

Amigo tengo 3 grandes dudas acerca de este y otros codigos alojados en tu web 1ero como hago para colocar en una Splash o formulario de inicio un Gifs animado o animacion flash para cuando inicie mi aplicacion y la 2da en el codigo como vizualizar videos en java (Netbeans) como realizo el procedimiento para reproducir el video automaticamente desde un archivo sin interfaz de grafica de botones o controles se que se asigna la direcion en este codigo pero no se como mediaPlayer = Manager.createRealizedPlayer(url); 3ra en tu codigo de Sonidos a Botones y metodos Swing funciona bien pero una vez compilado no se escuchan los sonidos y los archivos de sonidos se encuentran dentro del jar uso windows 7 y puedo usar el jmf sin instalarlo en cada PC a utilizar solo usando las librerias que contiene jmf y anexandolas a mi proyecto en netbeans agradeceria tu ayuda tengo esas incognitas las cuales son las que me falta para terminar mi proyecto software educativo.

Anónimo dijo...

Hola necesito ayuda ya hice todo paso a paso pero los componentes que tengo en el panel como labels y botones me salen debajo de la imagen, me podrian decir como hago para que quede encima de la foto? Gracias

DAVID dijo...

amigo mi imagen si sale correcta y todo pero por el tamaño del frame no sale completa como puedo hacer que salga completa

mouse dijo...

para todos :) pueden buscar el componente swing jcmousepanel en su ultima version, asi se ahorran el tiempo de programar y su uso es muy sencillo

:)

Anónimo dijo...

Saludos les comparto esta esperiencia
cuando intentaba ingresar la imagen en el JFrame me salia este error
Exception in thread "AWT-Event-0" java.lang.NullPointerExeption

y lo soluciones de esta forma.
el codigo de muestra que lo copio en la parte en ves de null, pongan que apunte a este objeto con this en ves de null
g.drawImage(imagenFondo.getImage(),0,0,tamanio.width, tamanio.height, null); = this

y me funciono

Unknown dijo...

Tengo problemas con esta linea
this.add( p , BorderLayout.CENTER);

Anónimo dijo...

Muy util, muchas gracias.
Fue la mejor manera q he encontrado

Unknown dijo...

desde Panama
exelente aporte despues de probar muchos codigos sin resultado este va de maravilla.

seria bueno agregar para que quede en pantalla completo.

Post recomendado