libro
www.tuyano.com
初心者のためのJava SEプログラミング入門

スレッドとアニメーション (2/9)

作成:2010-01-14 21:06
更新:2014-09-04 07:53

■スレッドを使ってみる

では、ここではRunnableを使った簡単な例をあげておきましょう。ボタンをクリックすると、ランダムに円が動き回るというものです。

下に掲載したソースコードがサンプルです。これを実行したら、「GO」ボタンをクリックしてみましょう。ランダムな方向に円が動きだします。動いている最中にボタンをクリックすれば、動く向きがランダムに変わります。常に円が動いていながら、同時にボタンをクリックした時のイベントやそのメソッドもちゃんと機能していることがわかりますね?

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

import java.awt.*;
import java.awt.event.*;

public class Test12 extends Frame implements ActionListener,Runnable {
    MyCanvas c1;
    Button b1;
    Thread t1;
    int lastX,lastY,moveX,moveY;
        
    public Test12() {
        super();
        setTitle("Hello");
        setSize(300,250);
        setLayout(null);
        
        c1 = new MyCanvas();
        c1.setBounds(25,25,250,150);
        this.add(c1);
        
        b1 = new Button("GO");
        b1.setBounds(25,200,100,25);
        b1.addActionListener(this);
        this.add(b1);
    }
        
     public static void main (String args []) {
        new Test12().setVisible(true);
    }
        
    public void actionPerformed(ActionEvent ev) {
        if (ev.getSource() == b1) {
            moveX = (int)(Math.random() * 21 - 11);
            moveY = (int)(Math.random() * 21 - 11);
            if (t1 == null){
                t1 = new Thread(this);
                t1.start();
            }
        }
    }
        
    public void run(){
        try {
            lastX = 0;
            lastY = 0;
            while(true){
                if (lastX + moveX < 0 || lastX + moveX > c1.getWidth()){
                    moveX *= -1;
                }
                if (lastY + moveY < 0 || lastY + moveY > c1.getHeight()){
                    moveY *= -1;
                }
                lastX += moveX;
                lastY += moveY;
                c1.repaint();
                t1.sleep(100);
            }
        } catch(Exception e){
            System.out.println(e);
        }
    }
        
    class MyCanvas extends Canvas{

        public void paint(Graphics g){
            g.setColor(Color.blue);
            g.fillOval(lastX - 10,lastY - 10,20,20);
        }
    }
}

※関連コンテンツ

「初心者のためのJava SEプログラミング入門」に戻る