パネルをクリックすると停止と一時停止ができる
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.AffineTransform;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainFrm extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
MainFrm MyFrm = new MainFrm();
MyFrm.setVisible(true);
}
public MainFrm() {
// TODO Auto-generated constructor stub
//フレームクローズでプロセスも閉じる。
setDefaultCloseOperation(EXIT_ON_CLOSE);
//フレームのタイトル
setTitle("メインフレーム");
//拡張したパネルを作成
final ExPanel pnl = new ExPanel(400, 300);
add(pnl);
//フレームを中身の大きさに自動調整
pack();
}
private class ExPanel extends JPanel implements Runnable, MouseListener{
/**
* スレッドを追加したパネル
*/
private static final long serialVersionUID = 1L;
private boolean StopFlg = false;
private int x = 0;
private int y = 0;
private int theta = 0;
private int vtheta = 5;
private int size = 30;
public ExPanel(int pnlWidth, int pnlHeight) {
// TODO Auto-generated constructor stub
setPreferredSize(new Dimension(pnlWidth, pnlHeight));
x = pnlWidth / 2;
y = pnlHeight / 2;
//クリックイベントをパネルが受け取れるように
setFocusable(true);
addMouseListener(this);
//スレッドを開始
Thread MyThread = new Thread(this);
MyThread.start();
}
//パネルがクリックされたらStopFlgを反転
public synchronized void StartStop(){
StopFlg = !StopFlg;
//wait()状態のスレッドをたたき起こす
notify();
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
//座標(x,y)を中心にしてtheta度だけ回転
AffineTransform at = new AffineTransform();
theta = (theta + vtheta) % 360;
at.setToRotation(Math.PI * theta / 180 , x, y);
g2d.setTransform(at);
//四角形を描画
g2d.drawRect(x, y, size, size);
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
//再描画
repaint();
try {
//20ミリ秒だけスリープ
Thread.sleep(20);
//同期をとる
synchronized (this) {
if(StopFlg){
wait();
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
//パネルがクリックされたら
StartStop();
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
}
最終更新:2011年06月14日 00:45