2016-04-16 46 views
1

我是java新手,需要製作遊戲。如何初始化多個paintComponents?

我碰到並且試圖解決過去兩個小時的問題sis如何在兩個不同的類中使用Jpanel和paintComponent繪製圖像。我似乎無法使其工作。

下面是我的第二類

public class Background extends JPanel { 

    private BufferedImage image; 

    public Background() { 

     try { 
      image = ImageIO.read(getClass().getResourceAsStream("/test_bg.png")); 
     } catch (Exception e) { 
      System.out.println("Error loading background image"); 
     } 
     repaint(); 

    } 

    @Override 
    public void paintComponent(Graphics g) { 

     Graphics2D g2d = (Graphics2D) g; 
     super.paintComponent(g); 
     g2d.drawImage(image, 0, 0, null); 
     g2d.fillRect(100, 100, 100, 100); 
    } 

} 

代碼這是幾乎同樣的事情,在我的水平一流,但是這並沒有出現在屏幕上。由於不值得一提的原因,我需要這是一個單獨的課程。

謝謝。

+1

如果圖像存在,此代碼看起來不錯。問題可能來自其他地方。 – Karl

+0

確保您將Background添加到JFrame中,並且它不在其他框架下。 – Karl

+0

卡爾,我該怎麼做? –

回答

-1

你的代碼在這裏工作,一個黑色的矩形出現在JPanel上。

我懷疑你是在這個之上添加其他JPanel。

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 

import javax.imageio.ImageIO; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Background extends JPanel { 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 
     f.getContentPane().add(new Background()); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(800, 600); 
     f.setVisible(true); 
    } 

    private BufferedImage image; 

    public Background() { 

     try { 
      image = ImageIO.read(getClass().getResourceAsStream("/test_bg.png")); 
     } catch (Exception e) { 
      System.out.println("Error loading background image"); 
     } 
     repaint(); 

    } 

    @Override 
    public void paintComponent(Graphics g) { 

     Graphics2D g2d = (Graphics2D) g; 
     super.paintComponent(g); 
     g2d.drawImage(image, 0, 0, null); 
     g2d.fillRect(100, 100, 100, 100); 
    } 

} 
+0

你在說什麼? 「你的解決方案有效」?這是一個答案? – gpasch

+0

是的,這就是我問的,我怎麼能有兩個,我知道它應該獨自工作 –