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

这就是我正在制作的二十一点游戏的底层代码。但是,在 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));
4

2 回答 2

3

drawImage()必须实现ImageObserver接口的最后一个参数。如果LayerUI这样做,您可以指定this. 或者,考虑使用ImageIO.read()同步读取图像,并指定null为最终参数。

于 2013-01-03T00:42:36.143 回答
2

就像垃圾神说的那样,使用ImageIO.read()来读取你的图片,然后你可以设置ImageObserver参数为null,你不需要实现ImageObserver。

如果我运行它,顶部的层(基本上是一个带有按钮的 JPanel)是不透明的。

这是预期的行为。请注意在JLayer 教程中他们如何使用该行

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

以实现透明度。

于 2013-01-08T18:09:24.723 回答