将数百个图像一次绘制到JFrame的有效方法是什么?

时间:2014-12-20 09:44:15

标签: java swing jframe awt paint

我正在编写2D策略游戏,并且需要能够一次显示数百张图像。

到目前为止,我有很多课程,但我有一个两难的境界,因为我担心我不能很好地理解JFrame部分。我写了一个较小的3课程来表明我的问题:

首先,我有一个构造框架的主类:

import javax.swing.JFrame;

public class MainClass {

    static JFrame Frame = new JFrame("MainFrame");

    public static void main(String[] args){
    Frame.add(new Board());
    Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Frame.setSize(1024, 500);
    Frame.setVisible(true);
    Frame.setResizable(false);
    }
  }

目前,board类是位于程序中心的类,它会拉出所有字符串以使程序运行。以前我在互联网上看到的所有教程都指向在董事会课程中使用paint(Graphics g)方法,但这给了我一个主要的困境。目前,每次我想要在屏幕上绘制一些内容时,我都必须手动输入:

  public board{

 //......code....

     public void paint(Graphics g){
    super.paint(g);
    Graphics2D g2d = (Graphics2D) g;

        g2d.drawImage(b.getImage(0), 0, 0, null);//Black
        g2d.drawImage(b.getImage(1), GameMachanic.getCurrentPosX(), GameMachanic.getCurrentPosY(), null);//background
        g2d.drawImage(b.getImage(3), GameMachanic.getCurrentPosX(), GameMachanic.getCurrentPosY(), null);//background
 //...more paint to screen code
        }
   //......code......
}

这种方法每隔几毫秒重新绘制一次,一切都很棒!除了...现在我已经达到了这样的程度,我需要一次从屏幕上绘制数百个不同的元素,从不同的类和当前的方法U必须手动输入每个绘制命令,使代码无效坦率地说是没有意义的。

因此,我尝试创建一个替代这种手工劳动需求的课程,使该方法可重复使用,但我发现它非常难以使其工作:

  public class GraphicsPaint extends JFrame{ 

     public void paint(Graphics g, ){
    super.paint(g);

    Graphics2D g2d = (Graphics2D) g;

        g2d.drawImage(b.getImage(0), 0, 0, null);//image
        }
}

但是我如何在我的代码中实现这个类,我是否将它作为一个组件添加? (如果是这样,怎么样?)因为我已经尝试了这个,它只是向我抛出一个错误,我尝试使用一些布局,但它们只是因为某些原因而出现故障。

我是否将它们添加到面板?我不知道那会怎么样......

除此之外,我一无所知,因为我整天都在看这个问题。

1 个答案:

答案 0 :(得分:2)

  

将数百张图片一次绘制到JFrame的有效方法是什么?

  • 将它们放入ArrayList
  • 等集合中
  • 循环迭代集合。
  • 在循环体内,依次绘制集合的每个成员。