2013-03-29 37 views
6

Java'da bir masa oyunu oluşturmak için çalışıyorum. Oyun tahtası için, JFrame'i dolduran JPanel'in tümünün arka planı olarak tahta görüntüsünü yerleştirmeye çalışıyordum. Bunu yapmanın bir yolunu buldum, ancak sadece yerel olarak saklanan dosyada, görüntüyü GUI içinde olduğu paketten de alabilmesi gerekiyor.Bir JPanel'e arka plan resmi ekleme

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

Ben ImageIcon kullanarak iyi bir düzeltme olduğunu okudum, ama ben düzgün nasıl kullanılacağını bilmiyorum.

Düzeltme 1 - Buraya bakmayın cevabı burada bulabilirsiniz http://www.coderanch.com/how-to/java/BackgroundImageOnJPanel Ayrıca çalışma alanımda yanlış biçimlendirilmiş bir resim vardı.

+3

Bu site çok istendiğinde arama yapmak isteyeceksiniz. Bir jar dosyasına ait bir görüntüye erişmek istiyorsanız, bunu bir kaynak olarak yapmak isteyeceksiniz, yani, ImageIO.read (getClass(). getResourceAsStream (resourcePath)); 'Kaynak yolu göreceli olarak sınıf dosyalarına. –

+0

Not: ImageIcon * bir "iyi düzeltme" değil. –

cevap

6
  1. Eğer kaynak okumak için ImageIO tarafından kullanılabilecek kaynak, bir URL başvurusunun Kavanoz dosyasına
  2. Kullanım getClass().getResource("/path/to/resource") içinde yer almaktadır yüklemek istediğinizden emin kaynağı olun Yardım için teşekkürler
image/görüntülerde bulunduğu takdirde

Yani, örneğin, Jar içindeki klasörü şunu kullanabilirsiniz

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

Örneğin ...

+2

Evet, tam olarak 1+. Dosya adındaki boşluklarla ilgili bir şey beni kaşındırıyor. –

+2

@HovercraftFullOfEels Evet, boşluklar beni de kızdırıyor – MadProgrammer

+0

Alanlar bozuk bir kopyaydı, dosya adı 5x5 Grid.gif, 1 tek alan. –