2013-01-02 72 views
1
public class GraphicsBoard extends LayerUI { 
    String picPath = "pictures/"; 
    String[] fileName = { "cards.png", "BlackJackBoard.png" }; 
    ClassLoader cl = GraphicsBoard.class.getClassLoader(); 
    URL imgURL[] = new URL[2]; 
    Toolkit tk = Toolkit.getDefaultToolkit(); 
    Image imgCards, imgBG; 

    public GraphicsBoard() throws Exception { 
     for (int x = 0; x < 2; x++) 
      imgURL[x] = cl.getResource(picPath + fileName[x]); 
     imgCards = tk.createImage(imgURL[0]); 
     imgBG = tk.createImage(imgURL[1]); 
    } 

    public void paintComponent(Graphics g) { 
     g.drawImage(imgBG, 0, 0, 550, 450, 0, 0, 551, 412, this); 
    } 
} 

這就是我的黑色遊戲即時通訊製作的underpart的代碼。然而,在eclipse中paintComponent的drawImage被加下劃線,我不確定如何修復它。當我在它懸停,它說LayerUI,g.drawImage帶下劃線

The method drawImage(Image, int, int, int, int, int, int, int, int, ImageObserver) in the type Graphics is not applicable for the arguments (Image, int, int, int, int, int, int, int, int, GraphicsBoard) 

,並給我的選擇是

Cast argument 'this' to 'ImageObserver' 

Let 'GraphicsBoard' implement 'ImageObserver' 

如果我運行它,在上面層(這基本上是帶按鈕的JPanel)不透明。

這是我使用的JLayer添加到我的框架

OverBoard overLay = new OverBoard(); 
GraphicsBoard graphicsBG = new GraphicsBoard(); 
add(new JLayer(overLay, graphicsBG)); 
+0

@trashgod在哪裏? – Exikle

+0

@trashgod它不是一個導入的問題,它沒有編譯 – Exikle

回答

2

正如trashgod所說,使用ImageIO.read()來讀取圖像,然後可以將ImageObserver參數設置爲null,並且不需要實現ImageObserver。

如果我運行它,頂層(基本上是一個帶有按鈕的JPanel)層是不透明的。

這是預期的行爲。請注意他們如何在JLayer tutorial中使用該行

g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .5f)); 

以實現透明度。

3

drawImage()最後一個參數必須實現ImageObserver接口。如果LayerUI這樣做,則可以指定this。或者,考慮使用ImageIO.read()來同步讀取圖像,並指定null作爲最終參數。

+0

另請參見['Toolkit.getDefaultToolkit()。createImage()'vs'ImageIO.read()'](http://stackoverflow.com/q/12041474/230513 )和[Q&A](http://stackoverflow.com/q/7045214/230513)。 – trashgod

+0

我知道,我問如何解決這個問題,我不想實現ImageObserver,因爲我甚至不知道如何使用它 – Exikle

+0

什麼是'LayerUI'?當你嘗試'this'或'null'時會發生什麼。 – trashgod