2010-05-30 216 views
3

這是我的代碼,它確實發現圖像,所以不是我關心的問題,我關心的是如何使圖像成爲面板的背景。我試圖與圖形工作,但我不工作,任何想法?請??JPanel背景圖片

try { 
      java.net.URL imgURL = MAINWINDOW.class.getResource(imagen); 

      Image imgFondo = javax.imageio.ImageIO.read(imgURL); 
      if (imgFondo != null) { 
       Graphics grafica=null; 
       grafica.drawImage(imgFondo, 0, 0, this); 
       panel.paintComponents(grafica); 
      } else { 
      System.err.println("Couldn't find file: " + imagen); 
      } 

     } catch... 

回答

2

這裏的代碼有錯誤。您在取消引用前將您的grafica設置爲null該行。這肯定會拋出一個NullPointerException。您應該使用傳遞給將用於繪畫的方法的方法,而不是聲明自己的Graphics對象。要在Swing做到這一點,你應該實現paintComponent方法來繪製你的形象,這樣的事情:

public void paintComponent(Graphics grafica) { 
    grafica.drawImage(imgFondo, 0, 0, this); 
    } 

注意,你不想做長時間運行的任務,如在在圖像文件從磁盤讀取畫線。上面的例子假設你已經加載了imgFondo並且存儲了它,以便可以通過paintComponent方法訪問它。

+0

謝謝,這是否意味着我必須重寫該方法?或者只是在我的課堂上實現它? – 2010-05-30 19:12:30

+0

如果你實現它,你將覆蓋super的方法。 – akf 2010-05-30 21:33:18

+0

'null); //這裏不需要ImageObserver更好的做法*不推定*如何使用類。 – 2015-01-14 23:47:28

0

如果您只是要以原始大小繪製圖像,那麼您只需將圖像添加到JLabel,然後通過設置其佈局管理器將該標籤作爲容器使用。

您唯一需要做自定義繪畫的時間是如果您想縮放或平鋪背景圖像或做一些其他奇特的繪畫。

有關兩種方法的更多信息,請參見Background Panel

另外,請查看Swing教程Custom Painting中的部分。

+0

謝謝!這些鏈接非常有用。我還有一個問題,我知道如何將圖像放在標籤上,但是如何使該標籤位於所有其他組件之下?在我的應用程序中,我創建了動態和靜態組件。 – 2010-05-30 19:14:01

+0

我不明白這個問題。我給你一個如何在「背景面板」鏈接中執行此操作的示例。我給了你4行代碼,告訴你如何使標籤像JPanel一樣行爲,以便你可以使用它作爲框架的內容窗格。如果您需要更多幫助發佈您的SSCCE:http://sscce.org – camickr 2010-05-31 01:01:27