我已经阅读了我在本网站和Java教程中找到的每一篇文章,但我仍然无法弄清楚为什么我的代码无效。即使我复制/粘贴其他人的代码,它仍然无效。
我做了一个虚拟程序只是为了测试它,代码看起来像这样:
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
public class gui extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
gui frame = new gui();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public gui() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 900, 700);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblNewLabel = new JLabel(new ImageIcon("bg.png"));
contentPane.add(lblNewLabel);
}
}
我正在尝试显示的背景图片bg.png位于项目的根文件夹中。我为路径字符串尝试了多种格式但没有成功。我做错了什么?
答案 0 :(得分:4)
您所犯错的是,当您致电new ImageIcon("bg.png")
时,您尝试从当前目录加载bg.png
文件。当前目录是执行java
的目录。当前目录可能不是您从IDE执行java
时所相信的目录。
使用以下代码显示当前目录:
File dir1 = new File (".");
System.out.println("current directory: " + dir1.getAbsolutePath());
您应该使用Class.getResource("/images/bg.png")
从类路径加载png文件。在源目录中创建一个images
文件夹,并将该文件放在此目录中。您的IDE会将其与.class
文件一起复制到目标文件夹。如果您没有使用IDE,那么您必须自己复制它。
编辑:
经过更多调查后,似乎问题的根本原因是使用了null布局。但是,上面仍然有效,因为从当前目录加载文件不是一个好主意。
答案 1 :(得分:3)
您正在寻找图像作为文件。执行此操作时,搜索全部在相对于用户目录的路径中完成,您可以通过
获取// code not tested
System.out.println(System.getProperty("user.dir"));
因此,您可能需要调整图像的路径才能将其作为文件。另一种选择是将其作为资源,如Siva Charan所述,在这种情况下,路径是相对于类文件的位置。
哦,一旦你学习和使用布局管理器,他们变得直观,创建和维护你的GUI变得更加容易。
答案 2 :(得分:2)
尝试这种方式: -
ImageIcon icon = createImageIcon("bg.png", "image description");
protected ImageIcon createImageIcon(String path, String description) {
java.net.URL imgURL = getClass().getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL, description);
} else {
System.err.println("Couldn't find file:" +path);
return null;
}
}
答案 3 :(得分:2)
只需将您的bg.png与您的gui.class文件放在一起即可。如果你编写这段代码,那就可以了。
private ImageIcon getImage(String path)
{
URL url = getClass().getResource(path);
System.out.println(url);
if (url != null)
return (new ImageIcon(url));
return null;
}
上找到更多信息
这里path =“bg.png”;或者如果它在某个文件夹中而不是path =“someFolder / bg.png”; 所以你要写这样的东西:
JLabel lblNewLabel = new JLabel(getImage("bg.png"));
lblNewLabel.setBounds(30, 30, 100, 100);
希望这可能会有所帮助。
此致
答案 4 :(得分:0)
您可能需要调试它并检查图像文件是否正确加载。然后,您需要检查JLabel组件是否获得其大小,因为将图像添加到JLabel不会扩展JLabel。
首先,您应该尝试查看图像处理程序的宽度和高度。