LayerUI、g.drawImage 下划线

Posted

技术标签:

【中文标题】LayerUI、g.drawImage 下划线【英文标题】:LayerUI, g.drawImage underlined 【发布时间】:2012-12-17 05:41:14 【问题描述】:
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 游戏的底层代码。但是,在 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 添加到我的 Frame 的方法

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

【问题讨论】:

@trashgod 它不是导入问题,它没有编译 【参考方案1】:

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

【讨论】:

另见Toolkit.getDefaultToolkit().createImage() vs ImageIO.read() 和这个Q&A。 我知道,我在问如何解决这个问题,我不想实现 ImageObserver,因为我什至不知道如何使用它 什么是LayerUI?当您尝试thisnull 时会发生什么。 trashgod:LayerUI 必须是 javax.swing.plaf.LayerUI(在 Java 7 中出现)【参考方案2】:

如trashgod所说,使用ImageIO.read()读取你的图片,然后你可以设置ImageObserver参数为null,你不需要实现ImageObserver。

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

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

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

实现透明。

【讨论】:

以上是关于LayerUI、g.drawImage 下划线的主要内容,如果未能解决你的问题,请参考以下文章

关于Jpanel中g.drawImage函数bug调试。。。

关于Jpanel中g.drawImage函数bug调试。。。

JAVA的问题g.drawImage第四个代表啥

求助:g.drawImage(bg, 0, 0, 20);的问题

C#中的g.DrawImage问题,请教一下,为啥ShowPic()不显示图片?

怎样删除winform中由Graphics g = this.CreateGraphics(); g.DrawImage(img, (int)L.Left, (int)L.Top, 30