我正在创建自定义JPanel组件,我想在设计时显示背景图像。我的问题是:如何从当前项目加载图像文件?
答案: 我不知道,但JLabel与当前项目的图像配合得很好。 所以我现在将使用JLabel。谢谢大家。
答案 0 :(得分:0)
我最近遇到了一些麻烦。
如果您打算将程序打包为可运行的JAR文件,我将推荐以下代码。它要求所有图像都位于项目的根目录中,名为“media”
imgURL = getClass().getResource("/media/Image_to_be_loaded.jpg");
if (imgURL != null) {
image = new ImageIcon(imgURL, "");
imageLabel = new JLabel(baeLogo);
} else {
imageLabel = new JLabel("No icon found");
}
但是,我注意到此代码仅在从JAR文件运行时才有效。当我直接从eclipse运行时,它始终显示“找不到图标”
答案 1 :(得分:0)
要加载图片,您可以使用此方法:
ImageIcon loadImageIcon(String name) {
URL imgURL = getClass().getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
参数name
具有以下约束:
/
开头,则资源的绝对名称是/
后面的名称部分。modified_package_name/name
,
其中modified_package_name
是此对象的包名称,/
替换为.
。有关详细信息,请参阅description of getResource(String name) method。
例如,如果将此方法放在MyPanel.java
文件中,并且您具有以下包结构
swing/
| - panel/
| | - MyPanel.java
| - resources/
| - my_image.jpg
比name
参数
../resources/my_image.jpg
或/swing/panel/resources/my_image.jpg
,
但不是swing/panel/resources/my_image.jpg
,也不是/resources/my_image.jpg
。
这是工作示例。在NetBeans UI Designer中,您可以进行模拟。
package swing.panel;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ImagePanel extends JPanel {
private Image img;
public ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}
public ImagePanel(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}
@Override
public void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, null);
}
/** Returns an ImageIcon, or null if the path was invalid. */
private static ImageIcon loadImageIcon(String path) {
URL imgURL = ImagePanel.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
ImagePanel panel =
new ImagePanel(loadImageIcon("../resources/image.png").getImage());
JFrame frame = new JFrame();
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
});
}
}
答案 2 :(得分:0)
他们在GUI设计器中显示的关键是,当调用Form的默认构造函数时,它将存在。如果您可以作为资源访问图像(正如其他人建议的那样),那么在尝试运行您的类以在设计器中进行表单预览时,Netbeans将使用它在构建/类层次结构中。将此图像加载到Form的默认无参数构造函数中,它应该显示在设计器中。