无法使用类路径资源将JPanel绘制为背景图片

时间:2017-03-10 11:36:45

标签: java swing user-interface path jpanel

以下是我打算用于绘画的课程。

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

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

public class BackgroundMainMenu extends JPanel {

private static final long serialVersionUID = 1L;
    public Image img;

      public BackgroundMainMenu(String img) {
        this(new ImageIcon(img).getImage());
      }

      public BackgroundMainMenu(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);
      }
}

当我使用如下所示的系统路径时,我得到了背景信息。

public class FirstWindow extends JFrame {

   public FirstWindow() {

   BackgroundMainMenu panel = new BackgroundMainMenu(newImageIcon("E:\\sources\\mainMenu.jpg").getImage());

   JFrame mainFrame = new JFrame("Program Window");
   mainFrame.getContentPane().add(panel); 
   mainFrame.pack();
   mainFrame.setVisible(true);
   }
}

但是当我使用classpath资源时它不起作用。我尝试更改此行

 this(new ImageIcon(img).getImage());

到此。

 this(new ImageIcon(FirstWindow.class.getResource(img)).getImage());

这一行

BackgroundMainMenu panel = new BackgroundMainMenu(new ImageIcon("E:\\sources\\mainMenu.jpg").getImage());

到此。

BackgroundMainMenu panel = new BackgroundMainMenu(newImageIcon(FirstWindow.class.getResource("/stuff/images/mainMenu.jpg")).getImage());

我做错了什么?有没有更好的方法使用JPanel绘制背景?

1 个答案:

答案 0 :(得分:1)

{{1}}

阅读Loading Images Using getResource上Swing教程中有关加载资源的基本示例

的部分

有几点:

  1. “stuff”目录实际上是在你的类路径上吗?
  2. 需要领先“/”吗?