在java中将图像加载到背景中
在Java中如何将图像加载到背景中?我尝试过许多不同的方法,但都不管用,所以我想问是否有人知道如何将png图像上传到JPanel中,制作自己的JPanel。在GUI的构造函数中添加PicPanel的对象在java中将图像加载到背景中,java,jframe,jpanel,Java,Jframe,Jpanel,在Java中如何将图像加载到背景中?我尝试过许多不同的方法,但都不管用,所以我想问是否有人知道如何将png图像上传到JPanel中,制作自己的JPanel。在GUI的构造函数中添加PicPanel的对象 class PicPanel extends JPanel{ private BufferedImage image; private int w,h; public PicPanel(String fname){ //Pass picture's filename a
class PicPanel extends JPanel{
private BufferedImage image;
private int w,h;
public PicPanel(String fname){ //Pass picture's filename as a parameter.
//reads the image
try {
image = ImageIO.read(getClass().getResource("/"+fname));
w = image.getWidth();
h = image.getHeight();
} catch (IOException ioe) {
System.out.println("Could not read in the pic");
//System.exit(0);
}
}
public Dimension getPreferredSize() {
return new Dimension(w,h);
}
//this will draw the image
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(image,0,0,this);
}
}
有许多方法可以实现这一点 你可以。。。 创建一个
JLabel
,将图像应用于其图标
属性,并将其设置为框架内容窗格。然后需要适当地设置布局管理器,因为JLabel
没有默认的布局管理器
JFrame frame = ...;
JLabel background = new JLabel(new ImageIcon(ImageIO.read(...)));
frame.setContentPane(background);
frame.setLayout(...);
frame.add(...);
问题是调整帧大小时,JLabel
不会调整图像大小
你可以。。。
创建一个自定义组件,从JPanel
扩展,并覆盖它的paintComponent
方法,根据需要绘制背景
这使您能够在图像的可用空间发生变化时,决定如何最佳地缩放图像。虽然有很多方法可以实现这一点,但你应该通读一遍,了解它们的优缺点
这就提出了一系列新的问题,你想扩展它们并保持纵横比吗?如果是这样的话,您希望将图像适配到可用区域还是填充它(这样它将始终覆盖可用空间)
请查看以了解更多详细信息
其他注意事项
图像通常最好通过ImageIO
API加载,因为它能够加载范围广泛的图像,但在出现问题时也会抛出IOException
有关更多详细信息,请参阅
图像的位置也很重要。如果映像位于应用程序外部(文件系统上的某个位置),则可以使用
ImageIO.read(新文件(“/path/to/image”)
。但是,如果图像嵌入到应用程序中(例如存储在Jar中),则需要使用类似于ImageIO.read(getClass().getResource(“/path/to/image”))
的东西,而不是…发布所有您尝试过的东西的代码。这是之前提出的问题:虽然这肯定会起作用,如果你什么也不做,只是画图像,那么一个JLabel
会更简单…只是说…这就是我的编程老师做的…这就是我做的…到目前为止效果很好:-)那么你的编程老师需要一些新的课程;)-在两行中,我可以做你们全班都做过的事情,但你们刚才说:“问题是,当调整帧的大小时,JLabel不会调整图像的大小”,所以你们为什么推荐这样做?是的!解释你自己!D: