2009-06-30 40 views

Trả lời

33

Không có phương thức tích hợp sẵn, nhưng có một số cách để thực hiện. Cách đơn giản nhất mà tôi có thể nghĩ đến vào lúc này là:

  1. Tạo phân lớp JComponent.
  2. Ghi đè phương thức paintComponent(Graphics g) để vẽ hình ảnh mà bạn muốn hiển thị.
  3. Set the content pane của số JFrame làm lớp con này.

Một số mẫu mã:

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

Lưu ý rằng mã này không xử lý thay đổi kích thước hình ảnh để phù hợp với JFrame, nếu đó là những gì bạn muốn.

+2

Bạn nên sử dụng super.paintComponents() phương pháp để phương pháp painComponent. – Sajad

17

Hãy thử điều này:

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

} 

Bằng cách này, điều này sẽ dẫn đến khung nội dung không phải là một container. Nếu bạn muốn thêm mọi thứ vào nó, bạn phải phân lớp một JPanel và ghi đè lên phương thức paintComponent.

+0

Thực ra, JLabel (giống như tất cả JComponents) mở rộng Container. Tôi tự hỏi điều gì xảy ra nếu bạn thêm thứ gì đó vào một nhãn? –

+0

thực sự không có gì ... tôi chỉ thử nó. bạn có thể thêm một JTextArea ví dụ nhưng nó không vẽ. –

+0

Không có gì xuất hiện vì nhãn có bố cục rỗng. Đặt trình quản lý bố cục của nhãn và bạn có thể thêm các thành phần vào nhãn đó. Chỉ cần lưu ý rằng kích thước của thành phần sẽ vẫn được xác định bởi kích thước của hình ảnh, chứ không phải các thành phần được thêm vào nhãn. – camickr

6

Bạn có thể sử dụng lớp Background Panel. Nó làm các bức tranh tùy chỉnh như đã giải thích ở trên nhưng cung cấp cho bạn các tùy chọn để hiển thị hình ảnh thu nhỏ, lát gạch hoặc kích thước bình thường. Nó cũng giải thích cách bạn có thể sử dụng một JLabel với một hình ảnh làm khung nội dung cho khung.

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

kiểm tra các liên kết dưới đây

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

Các vấn đề liên quan