`

用java做的滚动的正弦曲线

阅读更多
//windows API写过滚动正弦曲线,感觉用java做起来代码会比较小,试了一下,但感觉
//面不如windows好.

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


public class SinWave extends JFrame{
 private static final int NUM = 1000;
 private static final double TWOPI = 2 * 3.14;
 private static final int STEP = 10;
 private int []xPoints = new int[NUM];
 private int []yPoints = new int[NUM];
 private int []yCopyPoints = new int[STEP];
 private int width,height;
 private Timer timer;
 
 public SinWave()
 {
  setSize(500,400);
  this.setBackground(Color.white);
  Dimension scrSize=Toolkit.getDefaultToolkit().getScreenSize();
  width = getWidth();
  height = getHeight();
  this.setLocation((scrSize.width-width)/2,(scrSize.height-height)/2);
  for(int i = 0; i < NUM; i++)
  {
   xPoints[i] = i * width / NUM;
   yPoints[i] = (int)(height/2*(1-Math.sin(TWOPI * i / NUM)));
  }
  setVisible(true);
  timer = new Timer(200,new ActionListener(){
   public void actionPerformed(ActionEvent e)
   {
    for(int i = 0; i < STEP; i++)
     yCopyPoints[i] = yPoints[i];
    for(int i = 0; i < NUM-STEP; i++)
     yPoints[i] = yPoints[i+STEP];
    for(int i = 0; i < STEP; i++)
     yPoints[i+NUM-STEP] = yCopyPoints[i];
    repaint();
   }
  }); 

  addComponentListener(new ComponentAdapter() {
   public void componentResized(ComponentEvent ce) {
    width = getWidth();
    height = getHeight();
    for(int i = 0; i < NUM; i++)
    {
     xPoints[i] = i * width / NUM;
     yPoints[i] = (int)(height/2*(1-Math.sin(TWOPI * i / NUM)));
    }
   }
  });
  timer.start();
 }
 public void paint(Graphics g)
 {
  super.paint(g);
  g.setColor(Color.red);
  g.drawLine(0,height/2,width,height/2);
  g.setColor(Color.green);
  g.drawPolyline(xPoints,yPoints,NUM);
 }
 public static void main(String []args)
 {
  SinWave sw= new SinWave();
  sw.setDefaultCloseOperation(EXIT_ON_CLOSE);
 }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics