Java 将img添加到图形中

Java 将img添加到图形中,java,Java,我创建了椭圆形的对象,如下所示: for (toop b : top) { g.setColor(Color.orange); g.fillOval(b.getx(), b.gety(), 50, 50); } 一切都很好。 但是现在我想添加ball.png,而不是为它设置颜色。 我使用了此代码,但没有任何更改: for (toop b : top) { g.drawImage(new ImageIcon("C:\\Users\\PETTER\\Desktop\\bal

我创建了椭圆形的对象,如下所示:

for (toop b : top)
{
    g.setColor(Color.orange);
    g.fillOval(b.getx(), b.gety(), 50, 50);
}
一切都很好。 但是现在我想添加ball.png,而不是为它设置颜色。 我使用了此代码,但没有任何更改:

for (toop b : top)
{
    g.drawImage(new ImageIcon("C:\\Users\\PETTER\\Desktop\\ball.png").getImage(), b.getx() , b.gety() , 50, 50, b);
    g.fillOval(b.getx(), b.gety(), 50, 50);
}

那我该怎么做呢?请帮助我,请不要在
paint()
paintComponent()
方法中加载图像。在构造函数中执行此操作或创建
init()
方法。如果您试图在框架或面板中绘制
ball.png
,请执行以下操作:

Image ball = null;

private void init()
{
    ball = new ImageIcon(getClass().getClassLoader()
                                   .getResource("ball.png")).getImage();
}

@Override
public void paintComponent(Graphics g)
{
    g.drawImage(ball, 0, 0, 100, 100, null);
}

希望这有帮助。

如果在drawImage之后调用Fillova,橙色将覆盖油漆


另外,不要使用ImageIcons加载图像,而是使用ImageLoader.createImage(文件)。(返回的是一个BuffereImage,绘制速度也更快)

我不太清楚为什么图像没有显示出来,但您可能不想每次绘制屏幕时都从文件加载。在开始时加载ImageIcon一次,然后在g.drawImage()中引用它。应该更改什么?
g.drawImage(ball,0,0,100,100,null)应该是
g.drawImage(ball,0,0,100,100,this)
@andrewhompson我认为仅仅画图像不需要
ImageObserver
。在使用
MediaTracker
加载时,不是要检查加载和其他事件吗?在有人覆盖
init()
&决定使用
MediaTracker
,或者决定提供一个构造函数,在该构造函数中(可能异步加载的)映像由API用户传递之前,它可以正常工作。。