如何使用paintComponent()而不调用多个“draw()”方法?

时间:2013-05-05 06:53:54

标签: java swing graphics awt paintcomponent

我是java的新手,我正在尝试创建一个“游戏”。

在我的游戏中,我的主类中有paintComponent方法:

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    setBackground(new Color(120,120,255));
    BackgroundObject.drawGrass(g,385);
    BackgroundObject.drawRoad(g,420);
    BackgroundObject.drawSun(g,-20,-20);
    myCar.draw(g);
    debugger.draw(g);
}

问题在于我想要绘制的每个对象,我必须将它放在paintComponent方法下(就像当我想绘制汽车时,我必须将myCar.draw()放在paintComponent下)

有没有办法做到这一点?

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    setBackground(new Color(120,120,255));
    visualComponents.draw(g);
    GUI.draw(g);
}

当调用visualComponents.draw()时,任何类都可以告诉visualComponent类绘制对象。

例: 我的汽车类告诉visualComponent每当visualComponent.draw(g)时绘制车辆;被称为。

总结一下,我基本上要求大多数人将paintComponent用于他们的程序的结构

我一直在寻找谷歌,但找不到答案。

如果我的问题困惑,请告诉我。

1 个答案:

答案 0 :(得分:2)

您可以将元素添加到集合中,然后迭代集合并在循环中绘制每个元素。这可以在几行代码中绘制100个对象。

example会迭代Area个实例&使用以下方式绘制它们:

    for (Area obstacle : obstacles) {
        if (doAreasCollide(obstacle, player)) {
            g.setColor(Color.RED);
        } else {
            g.setColor(Color.GREEN);
        }
        g.fill(obstacle);
    }

3绿色&收集中有一个红色障碍物,而球(小黄色圆圈)是分开绘制的。