Foros del Web » Programación para mayores de 30 ;) » Java »

AYUDAAAAAAAAA!! Jframe con imagen de fondo!

Estas en el tema de AYUDAAAAAAAAA!! Jframe con imagen de fondo! en el foro de Java en Foros del Web. Quiero agregarle una imagen de fondo a un jFrame. busque en google y lo unico que encontraba eran codigos por la mitad o explicaciones que ...
  #1 (permalink)  
Antiguo 18/09/2010, 16:08
 
Fecha de Ingreso: septiembre-2010
Mensajes: 6
Antigüedad: 13 años, 7 meses
Puntos: 0
Exclamación AYUDAAAAAAAAA!! Jframe con imagen de fondo!

Quiero agregarle una imagen de fondo a un jFrame.
busque en google y lo unico que encontraba eran codigos por la mitad o explicaciones que parecia que estuvieran en japones porque no entendi nada de lo que explicaban, hasta que encontre esta pagina:

[URL="http://jc-mouse.blogspot.com/2009/12/jframe-con-imagen-de-fondo-en-netbeans.html"]http://jc-mouse.blogspot.com/2009/12/jframe-con-imagen-de-fondo-en-netbeans.html[/URL]

segui todos los pasos pero en la parte que dice:

Cita:
"...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();
} "
eso no me sirve, no me deja la imagen en el fondo del JFrame. Entonces intente arreglarlo y puse:
en la clase del jFrame:
Código:
mipanel p;
despues en el constructor de la ventana puse:

Código:
 p = new mipanel();
  this.setContentPane(p);
y ahi quedo perfecto la imagen se ve en el fondo de la ventana..
PERO el problema surge cuando quiero que se abra un jInternalFrame dentro de esa ventana. Porque tengo un menu que al hacer click en Abrir tiene que abrir una ventana interna. Pero esa ventana interna me queda atras del panel y no se ve.

el codigo para abir esa ventana es:

Código:
Abrir.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                VentanaInterna v = new VentanaInterna();
               panel.add(v);
               v.setVisible(true);
            }
        });
Con ese codigo me queda la ventana interna atras de la imagen y no se como hacer para que se abra adentro del panel

NECECITO AYUDA PORFAVOOOOR!! HACE 8 HORAS QUE ESTOY INTENTANDO Y NO PUEDO!!!!!!
  #2 (permalink)  
Antiguo 18/09/2010, 18:59
 
Fecha de Ingreso: febrero-2010
Mensajes: 15
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: AYUDAAAAAAAAA!! Jframe con imagen de fondo!

Mira yo lo que hago es algo mucho mas facil, cazo la imagen, tomo una jlabel y le pongo la imagen que voy a usar de fondo como icono a la j label, borro el texto de la jlabel, en la propiedad de la jframe voy a set layout y le meto null de esta forma se libera un toke mas, despues en el inspector pongo en la jerarqui a dicha j label como ultima, de esta manera queda queda la jlabel en el fondo y listo. no se si me explique bien de ultima si no entendiste mandame un msj XD
  #3 (permalink)  
Antiguo 18/09/2010, 19:23
 
Fecha de Ingreso: septiembre-2010
Mensajes: 6
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: AYUDAAAAAAAAA!! Jframe con imagen de fondo!

juto estaba editando el primer mensaje para decir que lo solucione, pero no de la forma que decis vos. yo lo que hice fue en la clase "mipanel" del ejemplo de http://jc-mouse.blogspot.com/2009/12/jframe-con-imagen-de-fondo-en-netbeans.html
en donde dice
Código:
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);
}
le cambie el paint por paintComponent y me funciono!.

De esa forma que decis vos con el label se puede agregarle una ventana interna adentro del label???
por ejemplo en mi programa tengo:
Código:
Abrir.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                VentanaInterna v = new VentanaInterna();
               getContentPane().add(v);
               v.setVisible(true);
            }
        });
si hago eso se agregaria la VentanaInterna adelante del la imagen del label o quedaria atras???
  #4 (permalink)  
Antiguo 19/09/2010, 00:41
Avatar de rudygt  
Fecha de Ingreso: septiembre-2010
Mensajes: 8
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: AYUDAAAAAAAAA!! Jframe con imagen de fondo!

aqui puedes ver un video para crear una clase que te permita poner fondo a un jframe

http://www.youtube.com/watch?v=l2ihSTP4gcg

tambien esta el link al codigo fuente de ejemplo

saludos!
  #5 (permalink)  
Antiguo 20/09/2010, 20:17
 
Fecha de Ingreso: septiembre-2010
Mensajes: 3
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: AYUDAAAAAAAAA!! Jframe con imagen de fondo!

la opcion que comentan acerca de poner la imagen en una etiqueta para mi seria la correcta, lo que deberias de hacer es utilizar un JDialog para la ventana interna, esta recibe como argumento la ventana padre, por lo que el jdialog se coloca frente a tu ventana sin opcion de selecccionar la ventana padre
  #6 (permalink)  
Antiguo 20/09/2010, 23:07
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: AYUDAAAAAAAAA!! Jframe con imagen de fondo!

Hola,

La única parte que me parece extraño de ese procedimiento es usar una etiqueta o un panel para mostrar el fondo. Una etiqueta es un componente y no hay forma de mandarla hasta atrás de los demás componentes eficientemente, los Layouts no están hechos para eso.

Ahora en el caso del Panel, porque no pintar el fondo sobre el fondo del Frame, y no sobre el fondo del Panel que está en el fondo, solo es agregar un componente problemático en este caso, aunque para otras aplicaciones y usos resulta indispensable hacerlo así.

Ahora bien ... ¿donde está el JDesktopPane?, para usar JInternalFrames necesitas un JDesktopPane para que las ventanas internas funcionen correctamente, sino el Layout del Frame va a dar problemas.

Una posible solución sería que crearas un JDesktopPane personalizado, una clase que lo extienda y sobre el JDesktopPane pintas el fondo. Por ejemplo:

Código Java:
Ver original
  1. private class MyJDesktopPane extends javax.swing.JDesktopPane {
  2.         @Override
  3.         protected void paintComponent(java.awt.Graphics g) {
  4.             super.paintComponent(g);
  5.             g.drawImage(fondo.getImage(), 0, 0, getWidth(), getHeight(), null);
  6.         }
  7.     }

En ese caso yo usé una clase privada para no crear otros archivos como ejemplo, pero puedes hacer una clase pública en otro archivo diferente.

Ahora creas una instancia del JDesktopPane y la colocas como el ContentPane del JFrame, todos los frames internos los tienes que agregar al JDesktopPane ('desk' en este caso) para que tengan la funcionalidad de moverse y arrastrarse correctamente.

Código Java:
Ver original
  1. desk = new MyJDesktopPane();
  2.         frame = new javax.swing.JInternalFrame("Hello World", true);
  3.         frame.setSize(200, 200);
  4.         frame.setVisible(true);
  5.         desk.add(frame);
  6.         setContentPane(desk);

En este caso agregué un JInternalFrame genérico solo como ejemplo. Al final lo que sucede es esto: la imagen se está pintando en el fondo del JDesktopPane y sobre este se pintan los JInternalFrames; no necesitas un Label ni un Panel para pintar el fondo puesto que solo te va a crear inconvenientes con los Layout y los InternalFrames.

Saludos,

ps:

El ejemplo funcionando con un menú, el fondo y un InternalFrame,
Código Java:
Ver original
  1. package demo;
  2.  
  3. public class MyJFrame extends javax.swing.JFrame {
  4.  
  5.     private javax.swing.JMenu jMenu1;
  6.     private javax.swing.JMenu jMenu2;
  7.     private javax.swing.JMenuBar jMenuBar1;
  8.  
  9.     javax.swing.ImageIcon fondo;
  10.     javax.swing.JInternalFrame frame;
  11.     MyJDesktopPane desk;
  12.  
  13.     private class MyJDesktopPane extends javax.swing.JDesktopPane {
  14.         @Override
  15.         protected void paintComponent(java.awt.Graphics g) {
  16.             super.paintComponent(g);
  17.             g.drawImage(fondo.getImage(), 0, 0, getWidth(), getHeight(), null);
  18.         }
  19.     }
  20.  
  21.     public MyJFrame() {
  22.         fondo = new javax.swing.ImageIcon(getClass().getResource("/demo/foto.jpg"));
  23.  
  24.         jMenuBar1 = new javax.swing.JMenuBar();
  25.         jMenu1 = new javax.swing.JMenu();
  26.         jMenu2 = new javax.swing.JMenu();
  27.         jMenu1.setText("File");
  28.         jMenuBar1.add(jMenu1);
  29.         jMenu2.setText("Edit");
  30.         jMenuBar1.add(jMenu2);
  31.         setJMenuBar(jMenuBar1);
  32.  
  33.         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  34.         pack();
  35.  
  36.         desk = new MyJDesktopPane();
  37.         frame = new javax.swing.JInternalFrame("Hello World", true);
  38.         frame.setSize(200, 200);
  39.         frame.setVisible(true);
  40.         desk.add(frame);
  41.         setContentPane(desk);
  42.         setSize(new java.awt.Dimension(640, 480));
  43.         setLocationRelativeTo(null);
  44.     }
  45.  
  46.     public static void main(String args[]) {
  47.         java.awt.EventQueue.invokeLater(new Runnable() {
  48.             public void run() {
  49.                 new MyJFrame().setVisible(true);
  50.             }
  51.         });
  52.     }
  53.  
  54. }

Etiquetas: fondo, jframe
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:30.