建立自訂 ImagePanel,建構子傳入 Image,在 paintComponent 繪製並拉伸至面板大小。
import java.awt.*;
import javax.swing.*;
public class ImagePanel extends JPanel {
private Image image;
public ImagePanel(Image image) {
this.image = image;
// 可選:設定面板大小為螢幕尺寸
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
setSize(screen.width, screen.height);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); // 清除背景
if (image != null) {
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
}
}
}
Image img = Toolkit.getDefaultToolkit().getImage("bg.jpg");
JPanel panel = new ImagePanel(img);
frame.add(panel);
適用於簡單專案,不需額外類別。此範例示範圖片平鋪覆蓋整個面板。
import java.awt.*;
import java.net.URL;
import javax.swing.*;
public class Demo extends JFrame {
public Demo() {
super("背景圖片示範");
JPanel panel = new JPanel() {
private Image bgImage;
{
// 從 classpath 載入圖片
URL imgURL = getClass().getResource("test.jpg");
if (imgURL != null) {
bgImage = new ImageIcon(imgURL).getImage();
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (bgImage == null) return;
int imgW = bgImage.getWidth(this);
int imgH = bgImage.getHeight(this);
int panelW = getWidth();
int panelH = getHeight();
// 平鋪繪製
for (int y = 0; y < panelH; y += imgH) {
for (int x = 0; x < panelW; x += imgW) {
g.drawImage(bgImage, x, y, this);
}
}
}
};
getContentPane().add(panel);
setSize(596, 298);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Demo();
}
}
| 特性 | 方法一(拉伸) | 方法二(平鋪) |
|---|---|---|
| 圖片比例 | 拉伸填滿,可能變形 | 保持原始比例,重複平鋪 |
| 適用場景 | 大尺寸背景圖、漸層圖 | 紋理圖案、小圖片重複 |
| 效能 | 單次繪製,較快 | 多次繪製,圖片小面板大時較慢 |