我在将图像设置为pannel:时遇到了NetBeans资源管理问题
这是我不工作的代码:
try {
BufferedImage myPicture = ImageIO.read(new File("images/3D.jpg"));
JLabel picLabel = new JLabel(new ImageIcon(myPicture));
pnlMain.add(picLabel); //the main and only pannel made by matisse is called pnlMain
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "Cannot set image");
}
名为"images"的文件夹位于MAIN项目文件夹中。有几个文件夹:build、nbproject、src和"images">
我遇到的问题是程序运行,但它没有设置图像。。。
有人建议我用这个代码在不同的包中制作另一个类:
public class PanelImage extends JPanel{
private Image imag;
public PanelImage(Image img){
if(imagen != null){
this.imagen = img;
}
}
@Override
public void paint(Graphics g){
g.drawImage(img, 0,0, getWidth(), getHeight(), this);
setOpaque(false);
super.paint(g);
}
}
但是我找不到合适的方法来实现它…
对于您的ImagePanel
类
super.paint[Component]
在所有其他东西之前- 不要覆盖
paint
,而是覆盖paintComponent
- 不要在
paintComponent
方法(即setOpaque()
(中设置属性。此外,默认情况下JPanel
是不透明的 - 覆盖面板上的
getPreferredSize()
用于加载图像
养成不从文件系统读取图像的习惯,除非应用程序仅适用于您的机器。
相反,从类路径读取,并通过将图像打包到类路径中使其成为资源
-
更改文件结构
ProjectRoot src images 3D.jpg
-
从类路径读取。使用
ImageIO
确保路径正确。如果无效,则会抛出异常URL url = getClass().getResource("/images/3D.jpg"); Image image = ImageIO.read(url);
对于Netbeans GUI Builder
您可以使用设计工具设置标签图标
- 从导航器或设计视图中选择标签
- 转到右侧的属性窗口,找到属性
icon
- 单击属性右侧的省略号按钮,将出现一个对话框
- 找到您的图像并选择"确定"(确保您的图像位于src中的包中(
请参阅相关和可能相关的