java - 如何使用 ImageIcon 将图像添加到我的 GUI?
问题描述
我对如何在 java 中将图像添加到我的 GUI 感到非常困惑。下面是我的代码,我ImageIcon
用来实现图像“map.png”,但是当我运行这个程序时,图像没有出现。这是因为它与我的 .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
考虑到图像不是应用程序的一部分,更适合从文件中读取图像;否则,图像是应用程序的一部分,getResource()
应使用类或类加载器。
文件的位置.java
在执行期间根本不相关。如果使用类加载器中的方法,文件的位置.class
(类路径)将很重要getResource
(推荐!特别是如果应该从 JAR 中读取图像/文件)。
推荐阅读
- jsonpath - 使用 JSONPath 从数组中检索连续的数组元素,而不使用索引,仅通过它们的值
- kotlin - ItemTouchHelper 如何更改开始刷卡的最小距离?
- cabal - ghc-pkg:找不到包数据库
- javascript - 如何基于逗号作为分隔符解析 JavaScript 中的字符串?
- python-3.x - 如何使用 python 读取大型 .conll 文件?
- r - 用两个变量的函数总结许多变量
- f# - 为什么 F# 中三引号字符串中的换行符与 Environment.NewLine 不同?
- javascript - Firestore - 从非规范化数据中获取分页光标
- python - 井字游戏中选定位置的功能
- python - 计算一列数据中的精确(不区分大小写)字符串,不包括与其他文本存在字符串匹配的单元格