2009-06-30 11 views

Respuesta

33

No hay un método incorporado, pero hay varias formas de hacerlo. La manera más directa que se me ocurre en este momento es:

  1. Crear una subclase de JComponent.
  2. Reemplazar el método paintComponent(Graphics g) para pintar la imagen que desea visualizar.
  3. Set the content pane del JFrame para ser esta subclase.

un código de ejemplo:

class ImagePanel extends JComponent { 
    private Image image; 
    public ImagePanel(Image image) { 
     this.image = image; 
    } 
    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, this); 
    } 
} 

// elsewhere 
BufferedImage myImage = ImageIO.read(...); 
JFrame myJFrame = new JFrame("Image pane"); 
myJFrame.setContentPane(new ImagePanel(myImage)); 

Tenga en cuenta que este código no se ocupa de cambiar el tamaño de la imagen para adaptarse a la JFrame, si eso es lo que quería.

+2

Debe utilizar super.paintComponents() para painComponent método. – Sajad

17

Prueba esto:

import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 


public class Test { 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 
     try { 
      f.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("test.jpg"))))); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     f.pack(); 
     f.setVisible(true); 
    } 

} 

Por cierto, esto se traducirá en el panel de contenido no ser un contenedor. Si desea agregar cosas, debe subclasificar un JPanel y anular el método paintComponent.

+0

En realidad, JLabel (como todos los JComponent) extiende Container. Me pregunto qué pasará si agregas algo a una etiqueta. –

+0

realmente nada ... solo lo probé. puede agregar un JTextArea por ejemplo pero no dibuja. –

+0

No aparece nada porque la etiqueta tiene un diseño nulo. Configure el administrador de diseño de la etiqueta y puede agregarle componentes. Solo tenga en cuenta que el tamaño del componente seguirá determinado por el tamaño de la imagen, no por los componentes agregados a la etiqueta. – camickr

6

Puede usar la clase Background Panel. Realiza la pintura personalizada como se explicó anteriormente pero le ofrece opciones para mostrar la imagen a escala, en mosaico o en tamaño normal. También explica cómo puede usar un JLabel con una imagen como el panel de contenido para el marco.

0
import javax.swing.*; 

import java.awt.*; 

import java.awt.event.*; 

class BackgroundImageJFrame extends JFrame 
{ 

    JButton b1; 
    JLabel l1; 

    public BackgroundImageJFrame() { 

     setSize(400,400); 
     setVisible(true); 

     setLayout(new BorderLayout()); 

     JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful_design.png")); 

     add(background); 

     background.setLayout(new FlowLayout()); 

     l1=new JLabel("Here is a button"); 
     b1=new JButton("I am a button"); 

     background.add(l1); 
     background.add(b1); 
    } 

    public static void main(String args[]) 
    { 
     new BackgroundImageJFrame(); 
    } 
} 

la salida el siguiente enlace

http://java-demos.blogspot.in/2012/09/setting-background-image-in-jframe.html

Cuestiones relacionadas