2010-10-29 49 views
7

Làm cách nào để đặt hình nền trên JPANEL?JPanel với nền ảnh

JPanel pDraw = new JPanel(new GridLayout(ROWS,COLS,2,2)); 
pDraw.setPreferredSize(new Dimension(600,600)); //size of the JPanel 
pDraw.setBackground(Color.RED); //How can I change the background from red color to image? 
+0

Tôi sẽ sử dụng một [JImagePanel] (https://github.com/dberm22/DBoard/blob/master/src/com/dberm22/utils/ JImagePanel.java). Nên làm mọi thứ bạn cần, – dberm22

Trả lời

2

Here's giải thích.

+0

Cảm ơn sự giúp đỡ của bạn :) – Jessy

4

Nó có lẽ là dễ nhất để tải các Image thành một ImageIcon và hiển thị nó trong một JLabel, tuy nhiên:
Trực tiếp 'vẽ' hình ảnh đến JPanel, ghi đè phương pháp paintComponent(Graphics) của JPanel một cái gì đó như sau:

public void paintComponent(Graphics page) 
{ 
    super.paintComponent(page); 
    page.drawImage(img, 0, 0, null); 
} 

nơi imgImage (có thể được tải thông qua cuộc gọi ImageIO.read()).

Graphics#drawImage là một lệnh quá tải nặng sẽ cho phép bạn đặc biệt cụ thể về cách thức, mức độ và vị trí bạn vẽ hình ảnh cho thành phần.

Bạn cũng có thể sử dụng phương pháp Image#getScaledInstance. Việc này sẽ mất -1 cho thông số width hoặc height để giữ tỷ lệ khung hình của hình ảnh giống nhau.

Đưa nó trong một cách ưa thích hơn:

public void paintComponent(Graphics page) 
{ 
    super.paintComponent(page); 

    int h = img.getHeight(null); 
    int w = img.getWidth(null); 

    // Scale Horizontally: 
    if (w > this.getWidth()) 
    { 
     img = img.getScaledInstance(getWidth(), -1, Image.SCALE_DEFAULT); 
     h = img.getHeight(null); 
    } 

    // Scale Vertically: 
    if (h > this.getHeight()) 
    { 
     img = img.getScaledInstance(-1, getHeight(), Image.SCALE_DEFAULT); 
    } 

    // Center Images 
    int x = (getWidth() - img.getWidth(null))/2; 
    int y = (getHeight() - img.getHeight(null))/2; 

    // Draw it 
    page.drawImage(img, x, y, null); 
} 
+0

cảm ơn bạn Reese – Jessy