2013-03-29 3 views
6

Я работаю над созданием настольной игры на Java. Для самого игрового поля я пытался разместить изображение доски в качестве фона всего JPanel, которое заполняет JFrame. Я нашел способ сделать это, но только с файлом, хранящимся локально, он должен уметь отображать изображение из пакета, в котором находится GUI.Добавление фонового изображения в JPanel

package Gui; 

import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.JPanel; 

//Proof of concept for setting an image as background of JPanel 

public class JBackgroundPanel extends JPanel { 
    private BufferedImage img; 

    public JBackgroundPanel() { 
     // load the background image 
     try { 
      img = ImageIO.read(new File(
        "C:\\Users\\Matthew\\Desktop\\5x5  Grid.jpg")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     // paint the background image and scale it to fill the entire space 
     g.drawImage(img, 0, 0, getWidth(), getHeight(), this); 
    } 
} 

Я читал, что с помощью ImageIcon хороший исправить, но я не знаю, как правильно его использовать.

Редактировать 1 - Я нашел здесь свой ответ http://www.coderanch.com/how-to/java/BackgroundImageOnJPanel У меня также была неправильная картинка в моей рабочей области. Спасибо за помощь

+3

Вы хотите найти этот сайт, так как это было задано очень много. если вы хотите получить доступ к изображению из файла jar, то вы захотите сделать это как ресурс, то есть 'ImageIO.read (getClass(). getResourceAsStream (resourcePath));' Путь ресурсов будет относительным к вашим файлам классов. –

+0

Примечание: ImageIcon - это не «хорошее исправление». –

ответ

6
  1. Убедитесь, что ресурс, который вы хотите загрузить находится в пределах Jar файла
  2. Использование getClass().getResource("/path/to/resource") получить URL ссылку на ресурс, который может быть использован ImageIO прочитать ресурс

Так, например, если изображение находится в папке/изображений папку внутри Jar, вы можете использовать

ImageIO.read(getClass().getResource("/images/5x5 Grid.jpg")); 

Например ...

+2

Да, точно, 1+. Однако что-то о пространствах в имени файла заставляет меня чесаться. –

+2

@HovercraftFullOfEels Да, пространство делает меня тоже пугливым – MadProgrammer

+0

Пространства были плохой копией, имя файла 5x5 Grid.gif, 1 пробел. –

Смежные вопросы