1

我用谷歌搜索并找到了代码:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ImageTest {

  public static void main(String[] args) {
    ImagePanel panel = new ImagePanel(new ImageIcon("background.png").getImage());

    JFrame frame = new JFrame();
    frame.getContentPane().add(panel);
    frame.pack();
    frame.setVisible(true);
  }
}

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);
  }

  public void paintComponent(Graphics g) {
    g.drawImage(img, 0, 0, null);
  }
}

当我创建 ImageTest.java 文件并将 background.png 放在同一个文件夹中时,这对我有用。

但是当我将相同的代码与图像一起粘贴到 Eclipse IDE(在默认包中)时,它不会将图像设置为背景。实际上它没有找到图像,这就是原因。

我试过让它们保持相同package pack;即使它找不到图像,所以没有输出。

我试图打开工作区>项目文件夹>战争>WEB-INF>类然后从cmd编译程序。仍然没有显示。

我不知道问题是什么。任何知道任何解决方案的人都非常受欢迎。

提前致谢。

也欢迎直接在框架上设置背景......

我已经使用代码完成了所有这些工作,但是当它起作用时,我将转向用于 GUI 的 windows builder。那么您的帮助是否也可以在窗口构建器中使用?

4

2 回答 2

2
..new ImageIcon("background.png")..  

这是加载不提供反馈的图像的一种愚蠢(但常见)的方法1

你很可能会发现它background.png不再是一个文件,而是一个 Jar 的一部分。在这种情况下,访问它的方法是使用URLClass.getResource().

  1. 加载图像的聪明方法是使用ImageIO,如果图像无法加载,它会抛出有用且信息丰富的异常。
于 2012-03-22T04:39:12.433 回答
1

这并没有真正回答您的问题,但由于答案已被接受,我想,到底是什么,您可能想看看。

这个类可以像任何 JPanel 一样使用。它将在面板的背景上拍一张图像,并在调整框架大小时调整图像的大小。

public class JPanelWithBackground extends JPanel { 
Image imageOrg = null; 
Image image = null; 
{ 
addComponentListener(new ComponentAdapter() { 
    public void componentResized(ComponentEvent e) { 
        int w = JPanelWithBackground.this.getWidth(); 
        int h = JPanelWithBackground.this.getHeight(); 
        image = w>0&&h>0?imageOrg.getScaledInstance(w,h,  
                java.awt.Image.SCALE_SMOOTH):imageOrg; 
        JPanelWithBackground.this.repaint(); 
    } 
}); 
} 
public JPanelWithBackground(Image i) { 
  imageOrg=i; 
  image=i; 
  setOpaque(false); 
} 
public void paint(Graphics g) { 
  if (image!=null) g.drawImage(image, 0, 0, null); 
  super.paint(g); 
} 
} 

使用示例:

Image image = your image 
JFrame f = new JFrame(""); 
JPanel j = new JPanelWithBackground(image); 
j.setLayout(new FlowLayout()); 
j.add(new JButton("YoYo")); 
j.add(new JButton("MaMa")); 
f.add(j); 
f.setVisible(true); 
于 2012-03-22T07:20:54.070 回答