我一直在阅读Java图形,所有指南似乎都指向Java中图形的更复杂实现。读了一些有关repaint()的知识后,我想到了这部分代码,对于我用它测试过的代码来说,这似乎很有效-

import javax.swing.*;
import java.awt.*;

public class Boids extends JFrame{

     public Boids(){
        setSize(400,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
     }

     public static void main(String[] a){
        Boids boids = new Boids();
        while(true) {
            boids.repaint();
        }
     }

     public void paint(Graphics g){
        // The code for Boids
     }
}


我的问题是;这段代码在某种程度上不好吗?一路上会伤害我吗?
如果没有,为什么不使用它,因为它看起来比我所见过的其他版本的代码更简单,更短。

最佳答案

您的评论表明您可能在paint(...)方法中包含程序逻辑,这是绝对不能执行的,因为您无法完全控制何时或是否将调用此方法。
您编写的代码对动画循环没有时序控制。
您的代码有运行Swing线程规则的风险。
您直接在JFrame中进行绘制,也应避免使用这种方法,因为这有可能使许多JFrame的职责混乱。而是绘制JComponent或JPanel的paintComponent方法。


我不记得是谁说过的,也许是门肯(H.L. Menken),但这就像是,“对于每个复杂的问题,都有一个清晰,简单和错误的解决方案。”

09-04 05:23