2013-03-29 7 views
6

Sto lavorando alla creazione di un gioco da tavolo in Java. Per il tabellone di gioco stesso stavo cercando di posizionare l'immagine del tabellone come sfondo dell'intero JPanel, che riempie il JFame. Ho trovato un modo per farlo, ma solo con il file memorizzato localmente, deve essere in grado di prendere l'immagine dal pacchetto che la GUI è anche all'interno.Aggiunta di un'immagine di sfondo a un 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); 
    } 
} 

Ho letto che con ImageIcon è una buona soluzione, ma non so come usarlo correttamente.

Edit 1 - Ho trovato la mia risposta qui http://www.coderanch.com/how-to/java/BackgroundImageOnJPanel Ho avuto anche l'immagine in formato sbagliato nel mio lavoro. Grazie per l'aiuto

+3

Dovrai cercare questo sito perché è stato chiesto molto. se stai cercando di accedere a un'immagine da un file jar, allora ti consigliamo di farlo come una risorsa, ad esempio, 'ImageIO.read (getClass(). getResourceAsStream (resourcePath));' Il percorso delle risorse sarà relativo ai tuoi file di classe. –

+0

Nota: ImageIcon non è * una "buona soluzione". –

risposta

6
  1. Assicurarsi che la risorsa che si desidera caricare si trova all'interno del file Jar
  2. Usa getClass().getResource("/path/to/resource") per ottenere un URL riferimento alla risorsa, che può essere utilizzato da ImageIO per leggere la risorsa

Così, per esempio, se l'immagine si trovava nelle immagini/cartella all'interno del vostro vaso, si potrebbe usare

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

Ad esempio ...

+2

Sì, esattamente, 1+. Qualcosa sugli spazi nel nome del file mi fa però prurito. –

+2

@HovercraftFullOfEels Sì, anche gli spazi mi rendono skittish – MadProgrammer

+0

Gli spazi erano una brutta copia, il nome del file è 5x5 Grid.gif, 1 spazio singolo. –