- ベストアンサー
javaアプレットの課題について
大学の授業の課題についてなんですが、 javaアプレットを使って 「徐々に大きな四角形を表示させ、ある程度の大きさの四角形になったらまた最初に戻り、さらにボタンを表示させ、ボタンを押す度に四角形の拡大をストップ、スタートさせるプログラムを作れ。また、マウスでクリックした部分を中心に、徐々に大きな四角形を表示させるようにもするように。」 という、自分でも書いていて分からなくなりそうな内容の課題が出されまして、先生などのアドバイスを頼りに import java.applet; import java.awt.Graphics; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.Color; import java.awt.Button; public class Report1 extends Applet implements ActionListener,Runnable { int x = 10; int y = 10; Button bt; public void init() { addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { x = e.getX(); y = e.getY(); repaint(); } }); { bt.setLabel("pause"); } while{ } if() repaint(); public void paint(Graphics g) { g.setColor(Color, white); g.fillRect(0, 0, 400, 400); } public void update(Graphics g){ paint(); 何とか上のような感じにまではこぎつけたのですが、 ここからは正直どうすればいいのか検討がつかず お手上げ状態なんです... どなたか解答又は参考になるサイトがあれば 教えていただけないでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
機能を分解して一つずつ作りこんでいった方がよいでしょう。 >「徐々に大きな四角形を表示させ、 まずはjava.util.Timer か java.lang.Thread を調べましょう。 現在の四角形サイズ縦h 横w と増加幅td とを、クラスのpropatyに保持して、 timerで描画実行ごとにhおよびwにtdを足すようにする。 >ある程度の大きさの四角形になったらまた最初に戻り、 さらに最大値maxSizeも、クラスのpropatyに保持して、 sizeがmaxSizeになるまでは増加(tdをプラスの値に)、 maxSizeを超えたら、tdを負の値にして減少を図る。 さらに最小値minSizeも入れておくと延々と増大縮小し続けるようにも作れます。 >さらにボタンを表示させ、ボタンを押す度に四角形の拡大をストップ、スタートさせるプログラムを作れ。 java.AWT.Buttonとjava.AWT.ActionLsenerとをよく調べましょう。 そして先のjava.util.Timer か java.lang.Threadでthreadの停止、続行をaction()から実行させましょう。 >また、マウスでクリックした部分を中心に、徐々に大きな四角形を表示させるようにもするように。」 中心位置についての変数x,yを、クラスのpropatyとして持たせて、 MouseAdapter#mousePressed()でxおよびyを変更してrepaint()を呼び出す。
その他の回答 (1)
- tom11
- ベストアンサー率53% (134/251)
こんにちは、 出題とは、ちょっと違いますが、 中央に、黒い四角を表示させて、1秒ごとにその、四角がどんどん小さくなり、 ある程度の大きさになると、元の、四角の大きさにもどります。 目的とするプログラムは、これを参考にすればできると思います。 IDEは、netbeans5.0で書いているので、 無駄なコードもあるので、ご容赦!! package bigrectangletest; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; public class bigretangletest extends javax.swing.JApplet { int x=150,y=150,w,h,i; Timer ti; /** Initializes the applet bigretangletest */ public void init() { try { java.awt.EventQueue.invokeAndWait(new Runnable() { public void run() { initComponents(); } }); } catch (Exception ex) { ex.printStackTrace(); } w=(int)(getWidth()* 0.7); h=(int)(getHeight()* 0.7); x=(int)(getWidth()/2); y=(int)(getHeight()/2); x = x-w/2; y = y-h/2; ti = new Timer(1000,new ActionListener() { public void actionPerformed(ActionEvent e) { i=i+1; if (i==10){ i=0; } w=(int)(getWidth()* 0.7*Math.pow(0.9,i)); h=(int)(getHeight()* 0.7*0.9*Math.pow(0.9,i)); x=(int)(getWidth()/2); y=(int)(getHeight()/2); x = x-w/2; y = y-h/2; repaint(); } }); ti.start(); } public void paint(Graphics g) { super.paint(g); g.fillRect(x,y,w,h); } // <editor-fold defaultstate="collapsed" desc=" Generated Code"> private void initComponents() { getContentPane().setLayout(null); }// </editor-fold> // Variables declaration - do not modify // End of variables declaration }