Primero lo primero, creamos una nueva clase a la cual le daremos por nombre "MiFondo.java", por ejemplo. La cargamos dentro del mismo paquete (si es que utilizamos paquetes, sino junto con la clase principal) y la instanciamos, entonces veamos, la clase "MiFondo.java" vendría quedando así:
import java.awt.Component; import java.awt.Graphics; import java.awt.Insets; import java.awt.image.BufferedImage; import java.io.File; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.JOptionPane; import javax.swing.border.Border; public class MiFondo implements Border{ private BufferedImage image ; public MiFondo(BufferedImage image ) { this.image=image;} public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { int x0 = x+ (width-image.getWidth())/2; int y0 = y+ (height-image.getHeight())/2; g.drawImage(image,x0,y0,null); } public Insets getBorderInsets(Component c) { return new Insets(0,0,0,0);} public boolean isBorderOpaque() { return true; } public static void cargarImagen(javax.swing.JDesktopPane jDeskp,File fileImagen) { try{ BufferedImage imagen = ImageIO.read(fileImagen); jDeskp.setBorder(new MiFondo(imagen)); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Error al Cargar Imagén del Sistema", "Error", JOptionPane.ERROR_MESSAGE); } } }
Ahora explico de donde viene cada cosa:
- BufferedImage image: es el contenedor de la imagen, en el se define la dirección del archivo.
- CargarImagen(): es el método que se encarga de procesar los datos y colocar el fondo.
- jDeskp: es el JDesktopPane que definimos en la clase principal.
- FileImagen: es la ruta de la imagen que estamos cargando.
Una vez definida nuestra clase para dibujar el fondo de nuestra aplicación lo único que nos hace falta es instanciar y definir las variables que hacen referencia al método, entonces el la clase principal colocamos lo siguiente:
public File imagen = new File (System.getProperty ("user.dir")+"\\paquete\\imagen.extension"); MiFondo.cargarImagen(jDesktopPane, imagen);
Donde:
- File imagen: es la ruta de la imagen, ruta del archivo.
- MiFondo.cargarImagen(): es el método para aplicar la imagen.
El código de "System.getProperty" es para obtener la ruta de donde se esta ejecutando nuestra aplicación, es para no tener que dar la ruta definitiva como por ejemplo "/dev/imagen" o "c:\programa\imagen". Con esto solo definimos la ruta dentro de la carpeta del sistema, no damos la ruta definitiva. Entonces, tomando la clase principal que explique en JInternalFrame's, vamos a ver como es el resulado final....
Imagen: Logo Carltiox en la Web (Descargar).
Clase "internalframefondo.java" (clase principal):
import java.io.File; import javax.swing.*; import java.awt.event.*; @SuppressWarnings("deprecation") public class internalframefondo extends JFrame { boolean boton=false; JDesktopPane dp = new JDesktopPane(); JPanel Panel1 =new JPanel(); JPanel Panel2 =new JPanel(); JPanel Panel3 =new JPanel(); JInternalFrame iPanel1 = new JInternalFrame("iFrame 1"); JInternalFrame iPanel2 = new JInternalFrame("iFrame 2"); JInternalFrame iPanel3 = new JInternalFrame("iFrame 3"); JTextField TEXTO = new JTextField(25); JButton BOTON = new JButton("Cerrar"); JLabel expli1 = new JLabel("Escribe 'cerrar' para cerrar el iFrame"); JLabel expli2 = new JLabel("Este es el iFrame 3"); JMenuBar B = new JMenuBar(); JMenu MENU = new JMenu("Click Aquí"); JMenuItem M1 = new JMenuItem("Abrir Ventana 1"); JMenuItem M2 = new JMenuItem("Abrir Ventana 2"); JMenuItem M3 = new JMenuItem("Abrir Ventana 3"); public File imagen = new File (System.getProperty ("user.dir")+"\\logocarlitoxenlaweb.png"); public internalframefondo() { super("Ejemplo de MDI con Fondo"); setLocation(100,100); setSize(640,480); setJMenuBar(B); add(dp); B.add(MENU); MENU.add(M1); MENU.add(M2); MENU.add(M3); dp.add(iPanel1); dp.add(iPanel2); dp.add(iPanel3); Panel1.add(expli1); Panel1.add(TEXTO); Panel2.add(BOTON); Panel3.add(expli2); iPanel1.add(Panel1); iPanel2.add(Panel2); iPanel3.add(Panel3); iPanel1.pack(); iPanel2.pack(); iPanel3.pack(); TEXTO.addKeyListener(new Comprobar()); BOTON.addActionListener(new Cerrar()); M1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent evt) { iPanel1.setVisible(true); } }); M2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent evt) { iPanel2.setVisible(true); } }); M3.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent evt) { iPanel3.setVisible(true); } }); iPanel1.setResizable(true); iPanel2.setIconifiable(true); iPanel3.setClosable(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MiFondo.cargarImagen(dp, imagen); show(); } public class Comprobar extends KeyAdapter{ public void keyTyped ( KeyEvent evt ){ if(TEXTO.getText().equalsIgnoreCase("cerrar")) iPanel1.setVisible(false); } } public class Cerrar implements ActionListener{ public void actionPerformed(ActionEvent evt){ iPanel2.setVisible(false); } } public static void main(String[] arg) { JOptionPane.showMessageDialog(null,"Ejemplo de MDI con Fondo...\n"); JOptionPane.showMessageDialog(null,"By Carlitox ("+ "http://calitoxenlaweb.blogspot.com)"); new internalframefondo(); } }
Clase "MiFondo.java" (establece la imagen):
import java.awt.Component; import java.awt.Graphics; import java.awt.Insets; import java.awt.image.BufferedImage; import java.io.File; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.JOptionPane; import javax.swing.border.Border; public class MiFondo implements Border{ private BufferedImage image ; public MiFondo(BufferedImage image ) { this.image=image;} public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { int x0 = x+ (width-image.getWidth())/2; int y0 = y+ (height-image.getHeight())/2; g.drawImage(image,x0,y0,null); } public Insets getBorderInsets(Component c) { return new Insets(0,0,0,0);} public boolean isBorderOpaque() { return true; } public static void cargarImagen(javax.swing.JDesktopPane jDeskp,File fileImagen) { try{ BufferedImage imagen = ImageIO.read(fileImagen); jDeskp.setBorder(new MiFondo(imagen)); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Error al Cargar Imagén", "Error", JOptionPane.ERROR_MESSAGE); } } }
NOTA: recuerda colocar las 2 clases el archivo dentro de la misma carpeta, pues ejemplo esta hecho para esto.... Cualquier problema no dudes en comentar.
Recibe notificaciones por correo
5 Comentarios
Escribir Comentarioesta muy bueno el tutorial te felicito pero creo que seria una buena idea que hagas tutoriales en yutube :)
Respondersi me compila pero me aparece un error al cargar la imagen :/
ResponderCual es el error, postea el log y damos con el problema, saludos!!!
Respondermandame el ejemplo en un zip porque necesito implementarlo yaaa por favor
ResponderClase de comentario este.... Si te estoy dando el código junto con su explicación a detalle, que hasta puedes solo copiar y pegar, para que quieres el zip? No, que bárbaro!
ResponderLamentablemente 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