2009-06-30 9 views

risposta

33

Non esiste un metodo integrato, ma esistono diversi modi per farlo. Il modo più semplice a cui posso pensare al momento è:

  1. Creare una sottoclasse di JComponent.
  2. Ignora il metodo paintComponent(Graphics g) per dipingere l'immagine che si desidera visualizzare.
  3. Set the content pane di JFrame essere questa sottoclasse.

Alcuni codice di esempio:

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)); 

Si noti che questo codice non gestisce ridimensionare l'immagine per adattarla al JFrame, se è quello che si voleva.

+2

Si dovrebbe usare super.paintComponents() per il metodo painComponent. – Sajad

17

Prova questo:

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); 
    } 

} 

Tra l'altro, questo si tradurrà nel riquadro del contenuto non essendo un contenitore. Se vuoi aggiungere delle cose devi sottoclassi un JPanel e sovrascrivere il metodo paintComponent.

+0

In realtà, JLabel (come tutti i JComponents) estende Container. Mi chiedo cosa succede se aggiungi qualcosa ad un'etichetta? –

+0

in realtà niente ... l'ho appena provato. puoi aggiungere un JTextArea per esempio ma non disegnare. –

+0

Non viene visualizzato nulla perché l'etichetta ha un layout nullo. Imposta il gestore di layout dell'etichetta e puoi aggiungervi componenti. Basta essere consapevoli che la dimensione del componente sarà ancora determinata dalla dimensione dell'immagine, non dai componenti aggiunti all'etichetta. – camickr

6

È possibile utilizzare la classe Background Panel. Fa la verniciatura personalizzata come spiegato sopra, ma ti dà le opzioni per visualizzare le dimensioni ridimensionate, piastrellate o normali dell'immagine. Spiega anche come è possibile utilizzare una JLabel con un'immagine come riquadro del contenuto per la cornice.

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(); 
    } 
} 

check out il link qui sotto

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