首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ImageIcon.paintIcon不会在JPanel上绘制图像

ImageIcon.paintIcon不会在JPanel上绘制图像
EN

Stack Overflow用户
提问于 2015-10-27 14:24:35
回答 2查看 1.9K关注 0票数 1

我正试图在.png上画一个JPanel。我使用ImageIcon构造函数导入它,并将其绘制到自定义面板的paintComponent中。

我的斯考斯

代码语言:javascript
运行
复制
package mypackage;

import java.awt.Graphics;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MyPanel extends JPanel {

    static JFrame frame;
    static MyPanel panel;
    static ImageIcon icon;

    public static void main(String[] args) {
        icon = new ImageIcon(MyPanel.class.getResource("MyImage.png"));
        frame = new JFrame();
        panel = new MyPanel();
        frame.setSize(500, 500);
        frame.add(panel);
        frame.setVisible(true);
        frame.repaint();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        icon.paintIcon(panel, g, 100, 100);
    }
}

我希望这张图像,这是一个白色背景上的几个形状,将显示在(100, 100)的面板上。相反,空白屏幕:

没有发生错误这一事实意味着程序正在正确地查找文件。

映像在我的Eclipse项目中,与类在同一个包中:

为什么会发生这种情况?我该怎么解决呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-27 15:03:45

由于代码看起来是正确的,我建议资源没有正确加载。

将png文件放在类路径中。例如:我会有一个目录:

代码语言:javascript
运行
复制
~/ProjectRoot/resources/mypackage/

然后在类路径中包含资源。在eclipse中,您可以通过

项目->属性-> Java生成路径->添加类文件夹

代码语言:javascript
运行
复制
BufferedImage img = 
    ImageIO.read(MyPanel.class.getResourceAsStream("MyImage.png"));

如果找不到图像,则会引发异常。您可以使用它来生成一个ImageIcon。

票数 3
EN

Stack Overflow用户

发布于 2015-10-27 15:06:18

当您使用ImageIcon从文件中读取图像时,您无法获得读取是否成功的指示。

下面是我使用ImageIO读取图像的GUI:

下面是与Java源代码相同的目录中的图像:

下面是您的代码,我使用ImageIO读取图像,并在paintComponent方法中绘制图像。

代码语言:javascript
运行
复制
package com.ggl.testing;

import java.awt.Graphics;
import java.awt.Image;
import java.io.IOException;

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

public class MyPanel extends JPanel {

    private static final long serialVersionUID = -9008812738915944216L;

    private static JFrame frame;
    private static MyPanel panel;
    private static Image image;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                image = getImage();
                frame = new JFrame();
                panel = new MyPanel();
                frame.setSize(500, 500);
                frame.add(panel);
                frame.setVisible(true);
            }
        });
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 100, 100, MyPanel.this);
    }

    private static Image getImage() {
        Image image = null;
        try {
            image = ImageIO.read(MyPanel.class.getResource("maze.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return image;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33370545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档