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:
Mi estimado, me aparece que el metodo formWindowOpened no esta en uso, que onda como se arregla eso?
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);
}
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
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
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..
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Ú...
MI HERMANO GRAX POR TODOS ESTOS APORTES ESTA MUY BUENA TU PAGINA
muy buena, pero tengo una inquietud, tu sabes o podrias explicar lo mismo pero con imagenes random?
Hola jc-mouse muchas gracias por tu ayuda tus programas me han apoyado mucho, cuidate
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.
Osmany lo más facil es utilizat un JLabel y su evento on_Click
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?
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.
....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.
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".
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??
tienes que redimensionar la imagen antes de colocarla en el control, te aconsejo que te bajes el componente swing jcmousepanel en su ultima version
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.
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
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.
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
amigo mi imagen si sale correcta y todo pero por el tamaño del frame no sale completa como puedo hacer que salga completa
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
:)
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
Tengo problemas con esta linea
this.add( p , BorderLayout.CENTER);
Muy util, muchas gracias.
Fue la mejor manera q he encontrado
desde Panama
exelente aporte despues de probar muchos codigos sin resultado este va de maravilla.
seria bueno agregar para que quede en pantalla completo.
Publicar un comentario