You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中使用g.drawImage()在JPanel无法显示PNG图片的问题

问题分析与解决方案

核心原因:方法名大小写错误

Swing 绘制 JPanel 的核心回调方法是**paintComponent(Graphics g)**(注意首字母为小写p),而你的代码中写成了PaintComponent(Graphics g)(首字母大写P)。Java 是大小写敏感语言,这个错误导致 Swing 的绘制系统不会调用你写的绘制逻辑,fillRect 和 drawImage 代码根本没有执行,自然看不到任何图形或图片。

修正后的代码

将方法名改为正确的paintComponent,建议加上@Override注解,避免此类大小写错误:

package main;
import java.io.InputStream;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;


public class GamePanel extends JPanel{

    private BufferedImage img, subImg;
    private float xDelta = 0, yDelta = 0;
    
    public GamePanel() {
        importImg();
        setPanelSize();
    }
    
    public void importImg() {
        InputStream is = getClass().getResourceAsStream("/TetrisBlocksTextureAtlas.png");
        if (is == null) {
            System.err.println("图片资源未找到,请检查路径");
            return;
        }
        try {
            img = ImageIO.read(is);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    public void setPanelSize() {
        Dimension size = new Dimension(200, 400);
        setPreferredSize(size);
    }
    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        
        g.fillRect(0, 0, 50, 50);
        if (img != null) {
            g.drawImage(img, 0, 0, null);
        }
    }
}

额外检查项

  1. 图片资源路径验证:/TetrisBlocksTextureAtlas.png 表示图片需放在项目的根类路径下(如 Maven 项目的src/main/resources目录,普通项目的src根目录),确保文件存在且路径无误。
  2. 窗口添加逻辑:确保GamePanel被正确添加到JFrame并显示,示例启动代码:
import javax.swing.JFrame;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("测试窗口");
        frame.add(new GamePanel());
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

内容的提问来源于stack exchange,提问作者goldern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:20:20