如何在JFrame中添加一个ImageIcon?

8

我正在尝试向一个帧添加一张图片,但似乎没有起作用。该图片是通过指定文件创建的ImageIcon。图片文件与Java文件存在于同一目录中。

import java.awt.BorderLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

    public class image {

        public static void main(String args[])
        {
            TimeFrame frame = new TimeFrame();
        }
    }

    class TimeFrame extends JFrame
    {
        //Image icon = Toolkit.getDefaultToolkit().getImage("me.jpg");
        ImageIcon icon = new ImageIcon("me.jpg");
        JLabel label = new JLabel(icon);
        public TimeFrame(){
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setTitle("My Frame");
            setSize(500,400);
            //this.setIconImage(icon);
            add(label,BorderLayout.CENTER);
            setVisible(true);
        }


    }

请查看如何向项目添加图片以及这个答案,以获取更多的解释,如果您是手动进行(没有使用IDE)。 - nIcE cOw
3个回答

7
如果您的图标在TimeFrame Java文件旁边,您应该使用:
java.net.URL imgUrl = getClass().getResource("me.jpg");
ImageIcon icon = new ImageIcon(imgUrl);

或者

java.net.URL imgUrl = TimeFrame.class.getResource("me.jpg");
ImageIcon icon = new ImageIcon(imgUrl);

你(可能)正在查找它,它位于你的工作目录中,你可以通过以下方式输出:

System.out.println(System.getProperty("user.dir"));

根据文档,getResource(...)方法可以找到给定名称的资源。如果没有找到该名称的资源,则此方法返回null...但我仍然不确定为什么之前它没有起作用...我使用了以下代码,它可以正常工作:Image image = ImageIO.read(new File("SydneyOperaHouse.jpg")); - Bernard

4

你会尝试这个吗?

 ImageIcon ImageIcon = new ImageIcon("me.jpg");
    Image Image = ImageIcon.getImage();
    this.setIconImage(Image);

10月23日00:24:38 MacBook-Pro.local java[592] <错误>: CGContextGetCTM: 无效的上下文0x0 10月23日00:24:38 MacBook-Pro.local java[592] <错误>: CGContextSetBaseCTM: 无效的上下文0x0 10月23日00:24:38 MacBook-Pro.local java[592] <错误>: CGContextGetCTM: 无效的上下文0x0 10月23日00:24:38 MacBook-Pro.local java[592] <错误>: CGContextSetBaseCTM: 无效的上下文0x0 - Bernard

2

只需将目录更改为“src/me.jpg”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接