2009-06-30 3 views

Antwort

33

Es gibt keine integrierte Methode, aber es gibt mehrere Möglichkeiten, dies zu tun. Die einfachste Art, an die ich im Moment denken kann, ist:

  1. Erstellen Sie eine Unterklasse von JComponent.
  2. Überschreiben Sie die paintComponent(Graphics g) Methode, um das Bild zu zeichnen, das Sie anzeigen möchten.
  3. Set the content pane der JFrame diese Unterklasse zu sein.

Einige Beispielcode:

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

Beachten Sie, dass dieser Code nicht das Bild Ändern der Größe nicht verarbeitet die JFrame passen, wenn es das ist, was Sie wollten.

+2

Sie sollten super.paintComponents() -Methode zu painComponent Verfahren. – Sajad

17

Try this:

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

} 

By the way, führt dies im Inhaltsbereich kein Container ist. Wenn Sie etwas hinzufügen möchten, müssen Sie eine JPanel ableiten und die paintComponent-Methode überschreiben.

+0

Eigentlich erweitert JLabel (wie alle JComponents) Container. Ich frage mich, was passiert, wenn Sie etwas zu einem Label hinzufügen? –

+0

eigentlich nichts ... ich habe es gerade ausprobiert. Sie können beispielsweise eine JTextArea hinzufügen, aber sie zeichnet nicht. –

+0

Nichts erscheint, weil das Label ein Null-Layout hat. Legen Sie den Layout-Manager des Labels fest, und Sie können ihm Komponenten hinzufügen. Beachten Sie jedoch, dass die Größe der Komponente immer noch von der Größe des Bildes bestimmt wird und nicht von den Komponenten, die dem Etikett hinzugefügt werden. – camickr

6

Sie können die Klasse Background Panel verwenden. Es führt das benutzerdefinierte Bild wie oben beschrieben durch, bietet Ihnen jedoch die Möglichkeit, das Bild skaliert, gekachelt oder normal groß darzustellen. Außerdem wird erläutert, wie Sie ein JLabel mit einem Bild als Inhaltsbereich für den Frame verwenden können.

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 den unten stehenden Link

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