2013-03-29 19 views
6

Pracuję nad budowaniem gry planszowej w Javie. Dla samej planszy próbowałem umieścić obraz planszy jako tło całego JPanela, który wypełnia JFrame. Znalazłem sposób, aby to zrobić, ale tylko z plikiem przechowywanym lokalnie, musi być w stanie pobrać obraz z paczki, w której znajduje się GUI.Dodawanie obrazu tła do 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); 
    } 
} 

Przeczytałem, że używanie ImageIcon to dobra poprawka, ale nie wiem, jak go właściwie używać.

Edytuj 1 - Znalazłem tutaj moją odpowiedź http://www.coderanch.com/how-to/java/BackgroundImageOnJPanel Miałem także obraz sformatowany nieprawidłowo w moim obszarze roboczym. Dzięki za pomoc

+3

Będziesz chciał przeszukać tę stronę, ponieważ było to bardzo często zadawane. jeśli szukasz dostępu do obrazu z pliku JAR, będziesz chciał zrobić to jako zasób, np. 'ImageIO.read (getClass(). getResourceAsStream (resourcePath));' Ścieżka zasobów będzie względna do plików zajęć. –

+0

Uwaga: ImageIcon to * nie * "dobra poprawka". –

Odpowiedz

6
  1. upewnij się, że zasób, który chcesz załadować znajduje się w pliku JAR
  2. Korzystanie getClass().getResource("/path/to/resource") do uzyskania URL odniesienie do zasobów, które mogą być wykorzystywane przez ImageIO do zapoznania się z zasobu

Tak więc, na przykład, jeżeli obraz znajdował się w folderze/images wewnątrz Jar, można użyć

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

Na przykład ...

+2

Tak, dokładnie 1+. Coś w spacji w nazwie pliku sprawia, że ​​mnie swędzi. –

+2

@HovercraftFullOfEels Tak, przestrzenie sprawiają, że jestem płochliwy. – MadProgrammer

+0

Przestrzenie były złą kopią, nazwa pliku to 5x5 Grid.gif, 1 pojedyncza spacja. –