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);
}
}
那就是我的代码,用于制作黑色游戏的下部部分。但是,在eclipse中,paintComponent中的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 :(得分:3)
drawImage()
的最后一个参数必须实现ImageObserver
接口。如果LayerUI
这样做,您可以指定this
。或者,考虑使用ImageIO.read()
同步读取图像,并指定null
作为最终参数。
答案 1 :(得分:2)
正如trashgod所说,使用ImageIO.read()读取您的图像,然后您可以将ImageObserver参数设置为null,而您不需要实现ImageObserver。
如果我运行它,顶部的图层(基本上是带按钮的JPanel)不透明。
这是预期的行为。请注意他们在JLayer tutorial中如何使用该行
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .5f));
实现透明度。