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の表示
}
}
2012年11月10日土曜日
Javaで等速運動 Demo
初めてJAVAでGUIを組むときのサンプル
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿