我一直在阅读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),但这就像是,“对于每个复杂的问题,都有一个清晰,简单和错误的解决方案。”