2012年11月10日土曜日

Javaで等速運動 Demo

初めてJAVAでGUIを組むときのサンプル

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.Timer;

public class UMotion extends JFrame {
 /* field */
 private Timer doAct;
 //Oval
 private double x_p,y_p;//coordinate
 private int o_wid=30,o_hei=30;//size
 //para
 private double velocity;
 private double time;
 //direction
 private int d=1;
 public UMotion(double s_velocity,double s_time) {
  //スーパークラスのコンストラクタ
  super("Uniform motion");
  //終了のオプション
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  //Frameの大きさ
  setSize(600, 200);
  //Computerの画面の大きさ
  Rectangle screen = getGraphicsConfiguration().getBounds();
  //画面の位置
  setLocation(screen.x + screen.width / 2 - getSize().width / 2, screen.y
    + screen.height / 2 - getSize().height / 2);
  
  //10は10/1000秒間毎に実行と言う意味
  doAct=new Timer(10, new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    //端っこに行ったら向きを変える
    //switch
    if((d==1&&x_p>getWidth()-o_wid))
     d=-1;
    else if((d==-1&&x_p<0))
     d=1;
    //移動距離を足していくと移動したことになる
    x_p+=d*velocity*time;
    repaint();
   }
  });
  //coordinate
  x_p=0;
  y_p=120;
  
  this.time=s_time;
  this.velocity=s_velocity;
 }
 //表示
 public void paint(Graphics g ){
  super.paint(g); 
  g.setColor(Color.RED);
  //円,->x座標,y座標,横幅,縦幅
  g.fillOval((int)x_p, (int)y_p-80,o_wid, o_hei);
  //円,->x座標,y座標,横幅,縦幅
  g.fillOval((int)x_p, (int)y_p-40,o_wid, o_hei);

  g.setColor(Color.BLUE);
  //円,->x座標,y座標,横幅,縦幅
  g.fillOval((int)x_p, (int)y_p,o_wid, o_hei);
  //タイマーが動いているかの確認
  if(!doAct.isRunning())
   doAct.start();//タイマーを動作させる
 }
 
 public static void main(String[] args) {
  new UMotion(10,0.05).setVisible(true);//JFrameの表示
 }

}

0 件のコメント:

コメントを投稿