Javaについての質問です。 正方形を250ミリ秒ごとに5ずつ落下させ、その正方形をボタンで左右に移動できるアップレットを作りたいのですが、 落下はするけど左右に移動しません。改善点が分からないのでアドバイスをお願いします。 また、正方形がアップレットの外に出ないようにし、正方形が下に来た後はボタンを押しても左右に移動しないようにしてください。 また、プログラムはスレッドを定義するものと実行するものの2つあります。 //スレッドを定義する import java.awt.*; class MovingRect extends Thread{ Component component; volatile boolean runFlag = false; //制御用のフラグ volatile int interval; //時間間隔 int x, y; //正方形の始点の位置 //コンストラクタ MovingRect(Component c, int t, int x0, int y0){ runFlag = true; component = c; interval = t; x = x0; y = y0; } public void run(){ //このコンポーネントの境界を表す Rectangle r1 = component.getBounds(); //正方形を5ずつ落下させる //正方形が下に来たら、動きを止める for(; y < r1.height - 20; y += 5){ component.repaint(); try{ Thread.sleep(interval); } catch(InterruptedException e){} if(!runFlag) break; } runFlag = false; component.repaint(); } public void drawFrame(Graphics g){ g.fillRect(x, y, 20, 20); } public void end(){ runFlag = false; } } -------------------------------------------------------------------------- //スレッドを実行するアップレット import java.awt.*; import java.applet.*; import java.awt.event.*; public class MovingRectApp extends Applet implements ActionListener{ MovingRect thread1 = null; Button left, right; int i = 60; //iは正方形の始点のx座標、初期値は60 public void init(){ left = new Button("left"); left.addActionListener(this); add(left); right = new Button("right"); right.addActionListener(this); add(right); } public void actionPerformed(ActionEvent e){ //正方形が左端から出ないようにする if(e.getSource() == left){ i = Math.max(i - 20, 0); } //正方形が右端から出ないようにする else if(e.getSource() == right){ i = Math.min(i + 20, 200); } repaint(); } public void paint(Graphics g){ if(thread1 != null) thread1.drawFrame(g); } public void start(){ //時間間隔は250ミリ秒 thread1 = new MovingRect(this, 250, i, 40); thread1.start(); } public void stop(){ thread1.end(); thread1 = null; } }
↧