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

これが、blackjacゲームのim作成の下部のコードです。ただし、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は、を指定できますthisImageIO.read()または、を使用して画像を同期的に読み取ることを検討しnull、最後のパラメーターとして指定します。

于 2013-01-03T00:42:36.143 に答える
2

trashgodが言ったように、ImageIO.read()を使用して画像を読み取ります。そうすれば、ImageObserverパラメーターをnullに設定でき、ImageObserverを実装する必要はありません。

実行すると、上のレイヤー(基本的にボタン付きのJPanel)は透明ではありません。

これが予想される動作です。JLayerチュートリアルで、これらの行がどのように使用されているかに注目してください。

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

透明性を実現します。

于 2013-01-08T18:09:24.723 に答える