繁体   English   中英

如何使用 ImageIcon 将图像添加到我的 GUI?

[英]How to add an image to my GUI using an ImageIcon?

我很困惑如何在 java 中将图像添加到我的 GUI。 下面是我的代码,我正在使用ImageIcon来实现图像“map.png”,但是当我运行这个程序时,图像没有出现。 这是因为它与 my.java 文件不在同一个文件夹中,还是有其他问题?

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GUI implements ActionListener 
{
    private int count = 0;
    private JLabel label;
    private JFrame frame;
    private JPanel panel;
    
    public GUI()
    {
        frame = new JFrame();
        frame.setResizable(false);
        
        ImageIcon icon = new ImageIcon("map.png");
        JLabel picture = new JLabel(icon);
        
        JButton button = new JButton("Click me");
        button.addActionListener(this);
        
        label = new JLabel("Number of clicks: 0");
        
        panel = new JPanel();
        panel.setBorder(BorderFactory.createEmptyBorder(400, 700, 10, 30));
        panel.setLayout(new GridLayout(0, 1));
        panel.add(button);
        panel.add(label);
        frame.add(picture);
        
        frame.add(panel, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Maynooth Thing");
        frame.pack();
        frame.setVisible(true);
    }
    
    public static void main(String[] args) 
    {
        new GUI();
    }

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        count++;
        label.setText("Number of clicks: " + count);
    }
}

Java会在实际工作目录中搜索镜像,java启动的目录。 这取决于它是如何启动的——如果是命令行,它与命令行使用的相同; IDE 通常有一些设置(例如 eclipse 的默认设置是项目主目录)。 打印它的简单方法System.out.println(new java.io.File("").getAbsolutePath());

不幸的是,如果找不到文件, new ImageIcon不会引发异常 - 如果找不到,图标大小( getIconHeight()getIconWidth() )将设置为-1 ImageIO更适合从文件中读取图像,因为图像不是应用程序的一部分; 否则,图像是应用程序的一部分,应使用来自 class 或 class 加载程序的getResource()

.java文件的位置在执行期间根本不相关。 如果使用来自 class 加载器的getResource方法(推荐。特别是如果应该从 JAR 读取图像/文件) .class文件(类路径)的位置将很重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM