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

标签 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 类是位于程序中心的类,它负责控制程序的运行。以前我在互联网上看到的所有教程都指出在 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......
}

此方法每隔几毫秒重新绘制一次,一切都很棒!除了...现在我已经到了这样的地步:我需要一次将数百个不同的元素绘制到屏幕上,这些元素来自不同的类,并且使用当前的方法,您必须手动输入每个绘制命令,从而使代码无效坦率地说毫无意义。

因此,我尝试创建一个类来代替这种手工劳动的需要,使该方法可重用,但我发现让它工作非常困难:

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

但是我如何将此类实现到我的代码中,是否将其添加为组件? (如果是这样,怎么办?)因为我已经尝试过这个,但它只是向我抛出一个错误,并且我尝试使用一些布局,但它们只是由于某种原因出现故障。

我要将它们添加到面板中吗?我不知道结果如何..

除此之外,我一无所知,因为我花了一整天的时间来研究这个问题。

最佳答案

What is an effective way of painting hundreds of images to a JFrame at a time?

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

关于java - 一次将数百个图像绘制到 JFrame 的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27578978/

相关文章:

java - 如何将数组从类传递到 JSP 文件

java - Gradle:使用注释过滤测试所需的指南

java - JButton 中的图标位置

java - 让 JButton 关闭窗口,但在关闭之前在 WindowClosing(WindowEvent e) 中运行代码

java - 如何改变 JasperViewer 的外观和感觉?

java - Java 异常处理框架

java - Ant 的代码未在 Maven 中运行

java - 为什么 MouseEvent.getButton() 会返回 NO_BUTTON?

Java Swing 应用程序不会退出

Java - JFrame 关闭时如何打印消息?