Abs*_*ng. 4 java eclipse swing jframe imageicon
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Picture extends JFrame{
public static void main(String[] args){
new Picture();
}
public Picture(){
this.setTitle("Picture");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel();
ImageIcon pic = new ImageIcon("TestImage.jpg");
p.add(new JLabel(pic));
this.add(p);
this.pack();
this.setVisible(true);
System.out.println(pic);
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码只是显示一个折叠的框架.我希望包(); 方法调用会调整我的.jpg图像周围的框架,对吗?
我已经可以听到第一个问题,是的,图像与我的项目包文件夹位于同一文件夹中.
我正在使用Eclipse IDE.
我还添加了println(); 声明查看Image引用返回的内容并返回"TestImage.jpg".我以为它会在内存中返回图像的地址.
我整个上午一直在阅读论坛,如果不复制和使用其他人更复杂的代码,我无法找到任何可以帮助我的东西.我尽量保持这个尽可能简单,这样我就不会混淆自己.
在此先感谢您的帮助.
尝试:
ImageIcon image = new ImageIcon(getClass().getResource("TestImage.jpg"));
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅如何使用图标教程,特别是使用getResource部分加载图像.
该图像与我的项目包文件夹位于同一文件夹中
而已.
如上所述,您的程序在当前工作目录中查找映像,而不是包层次结构.
从构造函数的Javadoc中String,它根据需要从指定的文件名中读取图像.但是,当您指定相对路径时,这意味着相对于运行应用程序的工作目录进行读取.
要解决此问题,您有两种选择:
指定相对于IDE运行程序的工作目录的映像文件名.我相信Eclipse在项目根目录中运行应用程序,源程序包层次结构以root为根src.在这种情况下,如果您指定它将会起作用src/TestImage.jpg.缺点是,如果您从不同的目录运行程序,则必须同时移动图像文件.这对于分发/打包很不方便,因为您不能只删除JAR文件并使其运行.
使用Java的资源加载器从包层次结构加载映像文件.要做到这一点,首先使用
getClass().getResource("TestImage.jpg")
Run Code Online (Sandbox Code Playgroud)
获取图像的URL(相对于包根).看到它ImageIcon有一个构造函数,接受一个URL来读取图像.所以你应该阅读图像
new ImageIcon(getClass().getResource("TestImage.jpg"))
Run Code Online (Sandbox Code Playgroud)
与程序包层次结构相关的优点是程序可以从任何位置运行,并且映像可以与您的应用程序捆绑在一个JAR文件中.
除此之外:最佳做法是创建一个包,在其中放置代码和资源(而不是仅将它们放在包根目录中).在那种情况下,"com/example/someapp/TestImage.jpg"改为通过.
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |