动态画图的实现方法:
1️⃣先完成静态图的最终类型
2️⃣找到动态元素(即动态画图是根据什么元素 动态画的)
下面例子的动态元素根据曲线的x从0到720,所以动态元素是曲线的中间状态的x值的最大值
3️⃣创建一个线程然后疯狂repaint
因为JCommonent 的 paintComponent方法只能刻画一帧,
所以需要创建一个线程来调节动态元素,然后再调用repaint方法实现动态画图
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Line2D;
/**
* @author dj
* @version 1.0
**/
public class CosFrame extends JFrame {
public static void main(String[] args) {
CosFrame frame = new CosFrame();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
CoordinateAxis coordinateAxis = new CoordinateAxis();
frame.add(coordinateAxis);
Thread thread = new Thread(coordinateAxis);
thread.start();
frame.setSize(900, 900);
frame.pack();
}
});
}
}
class CoordinateAxis extends JComponent implements Runnable {
final static int pi = (int) Math.PI * 50;
Graphics2D g2;
private int long_cos;
public void paintComponent(Graphics g) {
g2 = (Graphics2D) g;
//以(200,200)作为基点
Line2D lineX = new Line2D.Double(0, 200, 1000, 200);
Line2D lineY = new Line2D.Double(200, 0, 200, 1000);
g2.draw(lineX);
g2.draw(lineY);
for (int i = 0; i < long_cos; i++) {
int X = i + 200;
// final double cos = Math.cos(i /180.0 * Math.PI);
int Y = (int) (200 - Math.cos(i / 180.0 * Math.PI) * 160);
g2.drawString(".", X, Y);
// 通过控制long_cos 动态地展现绘制的过程
}
}
@Override
public void run() {
while (long_cos<720){
long_cos += 5;
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}