Muchos preguntan como colocar una imagen de fondo a una ventana, bien sea un frame o un panel, y la respuesta mas sencilla es colocar un label y sobre ese label colocar el resto de las cosas, para ello creamos un label y le indicamos que manejara un icono, este icono sera nuestra imagen de fondo....
JLabel FONDO = new JLabel(new ImageIcon("mi/imagen.extensi贸n"));
Es muy importante ver que la direcci贸n esta dada por slash (/) simple y no por el invertido (\), esta es la forma directa, aunque tambi茅n podemos cargar el icono y luego agregarlo al label...
ImageIcon ICONO = new ImageIcon("mi/imagen.extensi贸n"); JLabel FONDO = new JLabel(ICONO);
Esta es la forma m谩s sencilla y f谩cil de todas, aunque existen mejores esta es una excelente soluciones para cosas sencillas y pr谩cticas, podemos probar el siguiente ejemplo que consta de dos archivos, el .java y la imagen, para ello guardamos la imagen en nuestro disco y luego vamos con el ejemplo.
import java.awt.*; import javax.swing.*; public class FrameFondo extends Frame { MenuBar BARRA = new MenuBar(); Menu MENU1 = new Menu("Archivo"); Menu MENU2 = new Menu("Ayuda"); MenuItem ITEMa1 = new MenuItem("Nuevo"); MenuItem ITEMa2 = new MenuItem("Salir"); MenuItem ITEMb1 = new MenuItem("Acerca de..."); JLabel FONDO = new JLabel(new ImageIcon("C:/copypaste.jpg")); //Esta es la direcci贸n de la imagen public FrameFondo() { super("Primera Ventana"); setLocation(100,100); setSize(320,213); setMenuBar(BARRA); BARRA.add(MENU1); BARRA.add(MENU2); MENU1.add(ITEMa1); MENU1.add(ITEMa2); MENU2.add(ITEMb1); this.add(FONDO); show(); } public boolean handleEvent(Event evt) { if (evt.id == Event.WINDOW_DESTROY) //M茅todo para cerrar System.exit(0); //el Frame (ventana) if (evt.target instanceof MenuItem) {//M茅todos a utilizar para cada opci贸n if("Nuevo".equals(evt.arg)) JOptionPane.showMessageDialog(null, "Esto es solo prueba =)", "Carlitox en la web", JOptionPane.INFORMATION_MESSAGE); if("Salir".equals(evt.arg)) { JOptionPane.showMessageDialog(null, "Adios..!!", "Carlitox en la web", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } if("Acerca de...".equals(evt.arg)) JOptionPane.showMessageDialog(null, "Creado por: Carlos Mart铆nez"+ "\nSite web: www.carlitoxenlaweb.blogspot.com", "Carlitox en la web", JOptionPane.INFORMATION_MESSAGE); return (true); } return super.handleEvent(evt); } public static void main(String[] arg) { JOptionPane.showMessageDialog(null,"www.carlitoxenlaweb.blogspot.com"); new FrameFondo(); } }
La imagen podemos colocarla en la ra铆z del disco duro principal (c:\) o si estamos en linux seria mejor colocarla en la carpeta personal (/home)... Continua ->
Recibe notificaciones por correo
25 Comentarios
Escribir ComentarioHola!! gracias por el aporte!!! corre de maravilla!!! solo que tengo una duda!! intento poner un boton pero no me lo muestra por encima de la etiqueta que contiene la imagen de fondo! como podemos hacerle?? dejo mi mail: skateluis27@hot... saludos
ResponderHola, bueno, supongo que lo que haces es crear un nuevo bot贸n y agregarlo al panel, esto no te funcionara, recuerda que estamos agregando un label y colocandolo como imagen de fondo, as铆 que si quieres que algo se muestre por encima del label debes agregarlo a la etiqueta y no al panel, creamos el bot贸n, luego lo agregamos a la etiqueta, siguiendo el c贸digo anterior seria as铆:
ResponderFONDO.add(MiBoton);
Suerte...
ooooooooooooooooooooh compadre buenisimo gracias
Responderme diste la respuesta precisa con lo del boton tambien...muy agradecido por tu aporte, se los voy a recomendar a mis compa帽eros tu web.
De nada, cualquier duda que tengas puedes venir y preguntar cuando quieras, gracias por la recomendacion....
Responderexelente pagina mi hermano esta chida y ese ejercicio corre al pelo jeje te felicito
ResponderHola que tal, estoy realizando un proyecto y necesito saber algo:
ResponderEstoy utilizando gridLayout, y sobre cada celda pongo botones(para hacerlo simular como un tablero).
Pero quisiera poner imagenes, sobre estos botones; ejemplo una imagen sobre 3 botones y luego necesito que al darle clic se mueva la imagen a una nueva posicion:(
ALguien me puede ayudar
Mmmmm.... no te entiendo mucho pero eso es mucho c贸digo =)... si estas haciendo un "Layout" entonces ya debes estar algo avanzada en esto y debes conocer NetBeans, si lo usas entonces todo es m谩s f谩cil, pero dime algo, lo que quieres es que al darle click un label, celda o bot贸n cambie de imagen? o quieres que la imagen del bot贸n donde se hizo el click cambie?
ResponderHola Carlos.... Estoy realizando un proyecto final de una materia y estoy usando netbeans.
ResponderEl proyecto en si, es una batalla de barcos. Mi profesora quiere una especie de tablero, en donde se pongan barcos cuyo tama帽o sea dado por celdas(3 celdas hacen un yate, 2 celdas hacen un bote, etc). Tengo q poner inicialmente todos los barcos aleatoriamente en cualquier posicion dentro del tablero, una vez q los barcos estan puestos en el tablero tengo que arrastarlos a una nueva posicion(adem谩s tngo q poner una imagen del tama帽o del barco sobre las celdas donde esta ubicado el barco).
He puesto un panel con gridLayout y separados por botones. Pero no se como poner la imagen q represente a un barco sobre los botones y como lo arrastro.
Me podr铆as ayudar o indicar alguna p谩gina en donde expliquen acerca de esto.
Est谩 bien usar gridLayout y botones ???????
Please Contesta :)
personalmente no te recomiendo usar botones y mucho menos celdas para esto, es v谩lido claro, pero lo mejor es hacerlo con imagenes y divisiones de pantalla de frame, este juego es super famoso pero hacerlo no es tan simple como lo describes, puedes verlo completo en este post de taringa: batalla naval...
ResponderDe cualquier forma estudia el c贸digo y cualquier inquietud que tengas respecto al mismo yo te ayudo con lo que pueda.... prueba, saludos :)
yo no puedo aserlo ayudenme plizzzz
Respondervhergas
ResponderQue no puedes hacer? comenta mejor tu problema para ver como puedo ayudarte, saludos
Responder@_CarlitoX_
Responderpoosi! tu pagina..
mi duda es que cuando coloco el codigo me
Respondermarka error en Image me podrias ayudar?:$
¿Que error te marca? Pega aqu铆 la l铆nea del error para darle soluci贸n... Pero lo mas probable es que se trate de que no puede encontrar la ruta de la imagen o que no este bien definida la variable.
ResponderDisculpa la tardanza en responder, hay muchas inconsistencias en el c贸digo, empezando por esta:
ResponderTablero elegirTablero = new MenuTableros();
Seg煤n el c贸digo dice que se creara una variable "elegirTablero" desde la clase "MenuTableros" del tipo "Tablero", pero la clase "MenuTableros" no existe por ninguna parte del c贸digo, a lo mejor lo tendras dentro de un paquete y lo pones todo en un mismo lugar (supongo esto porque tampoco veo el m茅todo principal o "main"), pero en fin....
A simple vista parece ser que el problema es que
lo estas cargando como imagen (ImageIcon imagenTabler) cuando deberias cargarlo como label o "Image" sola, ya que se trata de un fondo fijo, prueba cambi谩ndolo por lo siguiente:
JLabel imagenTablero = new JLabel(new ImageIcon("Imagenes/Tableros.jpg"));
Y agr茅galo antes de mostrar todo, justo despu茅s del 煤ltimo add:
this.add(imagenTablero);
A mi me pega la Imagen como en el centro pero no se Extiende con la ventana, es decir no parece una imagen de "fondo" aunque tu ejemplo lo corre bien sin problemas .
ResponderEs que este ejemplo no lo estira, sino que centra la imagen en el panel... Para hacer lo que quieres necesitas pintar de la siguiente forma:
Responderpublic void paint(Graphics g){
g.drawImagen(tuimagen,1,1,ANCHO,ALTO,this);
}
Con esto lo estiras pasando la variable imageicon al m茅todo, cualquier cosa me dices si funciono... Saludos!!
necesito ayuda buenos dias en java escritorio quiero poner un label el cual cargara imagenes, lo que quiero es tener un botton y las vaya pasando ?? como hago eso... gracias... saludos
ResponderLo que se me ocurre de momentos es que te crees un panel junto con la funci贸n del cambio que esta en "esta entrada" (http://carlitoxenlaweb.blogspot.com/2011/02/imagen-de-fondo-java.html), luego le env铆as por par谩metro el Panel que contiene el fondo junto con el nombre del archivo y haces un "repaint" para redibujar el panel. F铆jate sobre todo en el m茅todo "cargarImagen"... Prueba y me comentas, saludos!!
Respondergracias por responder y lo que quiero es lo siguiente
ResponderjLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/a.jpeg")));
con esa linea de codigo cargo la imagen en el jlabel ,tengo una carpta que tiene 7 imagenes ,ahora quiero crear un boton que me vaya pasando y mostrando las imagenes en el jlabel...
?????
Ya veo, entonces lo que necesitas es refrescar la imagen que has cargado, para eso te recomiendo no hacerlo directo, sino como esta al comienzo de la entrada:
ResponderImageIcon ICONO1 = new ImageIcon("a.jpeg"),
ICONO2 = new ImageIcon("b.jpeg"),
ICONO3 = new ImageIcon("c.jpeg"),
ICONO4 = new ImageIcon("d.jpeg");
Luego para aplicar el icono que quieres utilizar lo haces como normalmente se har铆a:
JLabel etiqueta = new JLabel(ICONO_X); //'_X' representa el n煤mero del icono
Para cambiarlo solo tienes que aplicar el icono en el listener o evento y redibujar:
etiqueta.setIcon(ICONO_X);
etiqueta.repaint();
etiqueta.validate();
Hola amigo necesito ayuda!!! a mi me aparece la imagen pero me cubre los botones que tengo, es decir, que la imagen impide que se vizualicen los botones!!??
ResponderTe dejo el codigo para que si puedes me digas que tengo que hacerle!!!
Aahh lo que hago es que le agrego un Jpanl a un Jframe!!!
<<>>
package a帽adiendiimagen;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Jframe extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jcontentPane = null;
public static void main(String[] Jframe) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Jframe frame = new Jframe();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Jframe() {
super();
JButton btnHola = new JButton("Hola");
btnHola.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
GroupLayout groupLayout = new GroupLayout(getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(Alignment.TRAILING, groupLayout.createSequentialGroup()
.addContainerGap(84, Short.MAX_VALUE)
.addComponent(btnHola, GroupLayout.PREFERRED_SIZE, 119, GroupLayout.PREFERRED_SIZE)
.addGap(81))
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(Alignment.TRAILING, groupLayout.createSequentialGroup()
.addContainerGap(73, Short.MAX_VALUE)
.addComponent(btnHola, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE)
.addGap(34))
);
getContentPane().setLayout(groupLayout);
initialize();
}
private void initialize() {
this.setSize(1000, 700);
this.setContentPane(getJContentPane() );
this.setTitle("JFrame");
}
private Frame getJContentPane() {
if (jcontentPane == null){
jcontentPane = new Frame ("1.gif");
jcontentPane.setLayout(new BorderLayout());
}
return (Frame) jcontentPane;
}
}
<<>>
package a帽adiendiimagen;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridBagLayout;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class Frame extends JPanel {
ImageIcon imagen;
private static final long serialVersionUID = 1L;
public Frame(String nombre) {
super();
initialize();
imagen = new ImageIcon(getClass() .getResource(nombre));
setSize (imagen.getIconWidth(), imagen.getIconHeight());
}
protected void paintComponent (Graphics g){
Dimension d = getSize();
g.drawImage(imagen.getImage(),450, 40, d.width=500, d.height=600, null);
this.setOpaque(false);
super.paintComponent(g);
}
private void initialize() {
this.setSize(300, 200);
this.setLayout(new GridBagLayout() );
}
}
Esto es para agregar un label que har谩 de fondo, es solo para modo de ejemplo y paneles simples como un "acerca de" o algo por el estilo.... Por eso cuando utilizas un layout, el fondo se va para otro lado, se desfaza, se sobrepone o simplemente no se ve, por tu c贸digo solo es cuestion de que veas estas entradas y cambies una que otra l铆nea:
Responderhttp://carlitoxenlaweb.blogspot.com/2010/02/imagen-de-fondo-en-java-cont.html
http://carlitoxenlaweb.blogspot.com/2011/02/imagen-de-fondo-java.html
En ellas explico como hacerlo sin usar JLabel.... Saludos!!!
Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, as铆 que la moderaci贸n se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.
Si necesitas publicar c贸digo haz click en "Conversi贸n" para hacerlo legible.
Conversi贸nConversi贸n