Appletで円が徐々に大きくなる

このQ&Aのポイント
  • JavaのAppletを使用して円が徐々に大きくなるプログラムを作成しました。
  • 一定の直径を超えるたびに色が変わり、最大まで大きくなったら縮小して元の大きさに戻ります。
  • しかし、ボタンを押した時に円の動きを停止させるためのイベントを追加したいと思っています。どのようにすれば実現できるでしょうか?
回答を見る
  • ベストアンサー

JavaApplet

Appletで 円が徐々に大きくなる。 一定の直径を超えるたびに色が変わる。 最大まで大きくなったら、縮んで色を変えながらもとの大きさに戻る。 というのを延々繰り返すものを作りました。 コードは以下です。 import java.applet.*; import java.awt.*; import java.awt.Color; public class project4 extends Applet implements Runnable{ int x; Thread th; public void start(){ th = new Thread(this); th.start(); } public void run(){ while(1==1) { for (x =0; x<=180; ++x) { repaint(); try{ Thread.sleep(100); } catch( InterruptedException e){ } } for (; x>=0; --x) { repaint(); try{ Thread.sleep(100); } catch( InterruptedException e){ } } } } public void paint (Graphics g){ if (x<=18) {g.setColor(Color.blue); } g.fillOval(150,150,20+x,20+x); if ((x >18) && (x<=36)) {g.setColor(Color.darkGray); } g.fillOval(150,150,20+x,20+x); if ((x >36) && (x<=54)) {g.setColor(Color.yellow); } g.fillOval(150,150,20+x,20+x); if ((x >54) && (x<=72)) {g.setColor(Color.green); } g.fillOval(150,150,20+x,20+x); if ((x >72) && (x<=90)) {g.setColor(Color.orange); } g.fillOval(150,150,20+x,20+x); if ((x >90) && (x<=108)) {g.setColor(Color.red); } g.fillOval(150,150,20+x,20+x); if ((x >72) && (x<=108)) {g.setColor(Color.yellow); } g.fillOval(150,150,20+x,20+x); if ((x >108) && (x<=126)) {g.setColor(Color.magenta); } g.fillOval(150,150,20+x,20+x); if ((x >126) && (x<=144)) {g.setColor(Color.orange); } g.fillOval(150,150,20+x,20+x); if ((x >144) && (x<=162)) {g.setColor(Color.cyan); } g.fillOval(150,150,20+x,20+x); if ((x >162) && (x<=180)) {g.setColor(Color.pink); } g.fillOval(150,150,20+x,20+x); } } ここに ボタンを押したら、円の動きがとまる というeventを増やしたいのですが、どうすればよいかアドバイスをいただけませんか。ボタンを使うにはActionListenerを実装しなければならないと思うのですがRunnableと共存はできますか?

  • Java
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

>eventを増やしたい extendsは単一継承ですが、インターフェースは複数同時継承できます。 public class project4 extends Applet implements Runnable, ActionListener{ のように「,」で繋いでインタフェースクラスを複数記述します。 あとは必要なメソッドを記述

関連するQ&A

  • PacMan

    以下のようなプログラムで自動で動くパックマンを作りました。 パックマンが転がっていくのですが、どうしても目の部分の起動がかけません。 どなたかお力を貸していただけないでしょうか? ================================================= import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.util.*; /* <applet code="PacMan2.class" width="500"height="500"> </applet> */ public class PacMan2 extends Applet implements Runnable { volatile Thread thr; volatile boolean runFlag = true; public void start() { thr = new Thread(this); runFlag = true; thr.start(); } public void stop() { runFlag = false; thr = null; } public void run() { while (runFlag) { repaint(); try { Thread.sleep(1000); //1,000 mili-seconds } catch(InterruptedException e) { runFlag = false; } } } public void paint(Graphics g) { Calendar cal = Calendar.getInstance(); int s = cal.get(Calendar.SECOND); g.setColor(new Color(128,255,255)); g.fillArc(100+s,100,60,60,45-s,300);   g.setColor(new Color(0,0,0)); g.fillOval(130,105,10,10); } } =================================================

    • ベストアンサー
    • Java
  • Java applet

    Java appletを使用する課題なのですが、 途中まで書いて、それから止まってしまっています。 アドバイスなど頂ければ嬉しいです。 課題は、 (1)右から左へ動く文字列左から右へ動く文字列とを表示 (2)文字列が消えたらまた出てくるようにする (3)マウスのクリックボタンを押すと止まり、離すと動きだすようにする (2)まで考えたプログラム(コンパイル、実行済)を以下に載せます。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class SasakiYui extends Applet implements Runnable{ Thread th = null; Graphics g; int x; public void init(){ setBackground(Color.white); } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void run(){ while(!Thread.interrupted()){ for(x=600;x>-300;x=x-5){ repaint(); try{ Thread.sleep(50); } catch(InterruptedException e){} } } } public void paint(Graphics g){ g.drawString("Happy Brithday!",x,10); g.drawString("Happy Birthday!",600-x,40); } } (3)ができるようにするには、 addMouseListener(new Mouseadapter(){ public void mousePressed(MouseEvent e){……} を使用するのだろうとは思うのですが、 ・これを組み込むのはpublic void init(){の後で良いか ・……の部分に何を書けばいいのか の2点がわかりません; よろしければ、アドバイスお願い致します!

    • ベストアンサー
    • Java
  • <identifier>エラーについて

    paintメソッド内ではなく、public class直下で図形の表示をしなければならないのですが、どうしても <identifier>がありません とエラーが出てしまいます; 調べてみたのですがわからなかったので指摘をお願いしますorz プログラムは以下の通りです /* <applet code="Reidai25kai.class" width=500 height=600> </applet> */ import java.applet.Applet; import java.awt.*; public class kadaiM extends Applet implements Runnable { int xichi = 100, yichi = 250, xido = 3, yido = 4; int i, mx=225, my=495; int[] bx = {100,150,200,250,300,350, 100,150,200,250,300,350, 100,150,200,250,300,350}; int[] by = {250,250,250,250,250,250, 300,300,300,300,300,300, 350,350,350,350,350,350}; g.setColor(new Color( 0, 255, 0)); g.fillRect(mx, my, mx+50, my+10); g.drawRect(0, 0, 450, 550); for(i=0; i<18; i++) { g.setColor(new Color(255,170,10*i)); g.fillOval(bx[i]-20,by[i]-20,50,50); } public void init() { Thread hyoji; hyoji = new Thread(this); hyoji.start(); } public void run() { for( ; ; ) { try { xichi = xichi + xido; //ボールx座標の更新 yichi = yichi + yido; //ボールy座標の更新 repaint(); if(xichi < 10 || xichi > 440)xido = -xido; //横方向跳ね返り if(yichi < 10 || yichi > 540)yido = -yido; //縦方向跳ね返り Thread.sleep(30); } catch(InterruptedException e){} } } public void paint(Graphics g) { g.setColor(new Color( 0, 0, 255)); g.fillOval(xichi-10, yichi-10, 20, 20); } }

  • エラーも無いのにボールが動きません

     JAVA初心者です、宜しくお願いします。  今晩は、以下のようなコードを書いてやりましたが、動きません。  何故でしょう、特にエラーははいていません。  原因が分かりません、宜しくお願いします。 =============================================================== public class Ball_1 extends Applet implements Runnable { Thread thr = null; Color BGcolor; int appWidth; int appHeight; int x; int vel; public void inti() { BGcolor = Color.white; appWidth = 400; appHeight = 400; x = 30; vel = 20; } public void paint(Graphics g) { g.setColor(BGcolor); g.fillRect(0,0,appWidth,appHeight); g.setColor(Color.blue); g.fillOval(x,20,100,100); } public void start() { if(thr == null) { thr = new Thread(this); thr.start(); } } public void stop() { if(thr != null) { thr.stop(); thr = null; } } public void run() { while(true) { x = x + vel; if(x > appWidth) { x = x - appWidth; } repaint(); try { thr.sleep(50); } catch(InterruptedException e) { thr.stop(); } } } }

    • ベストアンサー
    • Java
  • JAVAのアプレットのアニメーションの質問

    javaのアプレットに関する質問なんですが、今次の条件でアニメーションを作っているんですが、どうしても解決できない問題があります。 赤い長方形が左から右に動いていくプログラムを作成する。 ・ 長方形が描画領域 の右端に消えると左端から再 度出現するようにせよ。 ・ Reverseと書かれたボタンを押すと長方形の進行方 向が左右反対になる。 ・ このとき、左右どちらの端に長方形が消えた場合も 反対端から長方形は出現する。 ・ 長方形をクリック(ボタン押下)すると長方形の色が 変化する。 ・ 赤い長方形であれば青に、青い長方形であれば赤 に変化する。 この条件でつくろうと思っているのですが、長方形をクリックしたときに、色の変化がどうしてもできません。どこに問題があるか分かりません。御教授お願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.Button; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.MouseListener; public class Report2 extends Applet implements Runnable,ActionListener,MouseListener{ int x=100; int y=50; int width=80; int height=120; int dir=-2; int w; int z; Button bt; boolean direction; boolean colorRed; public void actionPerformed(ActionEvent ae){ if(direction==true){ direction=false; } else{ direction=true; } } public void init(){ bt=new Button("Reverse"); add(bt); bt.addActionListener(this); Thread th; th =new Thread(this); th.start(); addMouseListener(this); } public void mouseClicked(MouseEvent e){ w=e.getX(); z=e.getY(); repaint(); if(e.getX()>=x && e.getX()<=x+width && e.getY()>=y && e.getY()<=y+height){ colorRed=!colorRed; } } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } public void mouseReleased(MouseEvent e){ } public void mousePressed(MouseEvent e){ w=e.getX(); z=e.getY(); repaint(); if(e.getX()>=x && e.getX()<=x+width && e.getY()>=y && e.getY()<=y+height){ colorRed=!colorRed; } } public void run() { while(true){ x++; if(x==400){ x=-80; } if(direction==true){ x=x+dir; } else{ } repaint(); try{ Thread.sleep(30); } catch(InterruptedException e){} } } public void paint(Graphics g){ g.setColor(Color.white); g.fillRect(0,0,400,200); g.setColor(Color.red); g.fillRect(x,y,80,120); if(colorRed=true){ g.setColor(Color.red); } if(colorRed=false){ g.setColor(Color.blue); } g.fillRect(x,y,width,height); g.setColor(Color.black); g.fillRect(x,y,10,10); } }

    • ベストアンサー
    • Java
  • 色が変わる文字について

    javaの初心者です。 環境OSWindows2000 使用ソフトjavaBuilder5です。 今回入門書を見ながら作ったのですが、 (写したが正しいかな?) 実行すると文字の後ろの色がグレーになります。 これを変更する方法を教えてください 黒とか赤とかに変更したいのです。 ーーーソースーーー import java.applet.Applet; import java.awt.*; import java.lang.*; public class TopTitle extends Applet implements Runnable{ Thread th=null; String msg="",cen="",def="",aft=""; int no,width,wait; public void init(){ msg=getParameter("MESSAGE"); msg=" "+msg+" "; no=msg.length(); wait=Integer.parseInt(getParameter("WAIT")); } public void update(Graphics g){ paint(g); } public void paint(Graphics g){ Font f=new Font("TimesRoman",Font.BOLD,48); FontMetrics fm=getFontMetrics(f); g.setFont(f); int width=fm.stringWidth(def); g.setColor(new Color(0,0,255)); g.drawString(msg,0,48); g.setColor(new Color(125,125,125)); g.drawString(cen,width,48); } public void start(){ if (th==null){ th=new Thread(this); th.start(); } } public void run(){ int i; while (true){ try{ for(i=0;i<no-1;i++){ def=msg.substring(0,i); cen=msg.substring(i,i+1); th.sleep(1000); repaint(); } th.sleep(wait); } catch(InterruptedException e){} } } public void stop(){ if(th!=null){ th.stop(); th=null; } } }

    • ベストアンサー
    • Java
  • Javaアプレットについてですが

    Javaアプレットでボタンを押したら数字が増えるものを作っているのですがどうもうまく動きません。 ソースは下の通りです。 変更しなければいけないところがあるならお願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Sample7 extends Applet implements Runnable, ActionListener { Button bt; int num; public void init() { bt = new Button("開始"); add(bt); bt.addActionListener(this); Thread th; th = new Thread(this); th.start(); } public void actionPerformed(ActionEvent ae) { public void run() { try{ for(int i=0; i<11; i++){ num = i; repaint(); Thread.sleep(1000); } } catch(InterruptedException e){} } } public void paint(Graphics g) { String str = num + "です。"; g.drawString(str, 50, 50); } }

    • ベストアンサー
    • Java
  • コンポーネントの組み込みについて

    アプレットでもAWTアプリでもSwingアプリでもなんでもいいんですが、 特定の条件を満たした時に、はじめは表示されていないボタンやテキストフィールドなどを後から表示させたいのですが、できません。 単純にadd()ではできないようで… やり方を教えていただけませんか。。 下は、10秒後にボタンが表示されるように自分で作ってみたサンプルアプレットです。 //<applet code="buttonsample.class" width=300 height=200></applet> import java.applet.*; import java.awt.*; import java.awt.event.*; public class buttonsample extends Applet implements Runnable { int count; //カウント Thread th; //スレッド Button BT; //ボタン public void init() { setLayout(new FlowLayout()); count = 0; BT = new Button(); BT.setLabel("ボタン"); } public void start() { if(th == null) { th = new Thread(this); th.start(); } } public void stop() { th = null; } public void run() { while(count < 10) { repaint(); count++; try { Thread.sleep(1000); } catch(InterruptedException e){} } add(BT); } public void paint(Graphics g) { g.drawString(""+(count+1),100,100); } } <EOS>

    • ベストアンサー
    • Java
  • 「初心者です」-Xlint: deprecation

    import java.awt.*; import java.applet.*; public class ani_ball extends Applet implements Runnable { Thread th_mvball = null; int X,Y; double x1,y1; double x2,y2; double dx,dy; Graphics g; public void init() { this.setBackground(new Color(150,245,255)); this.X = 250; this.Y = 250; this.setSize(X,Y); this.x1 = this.x2 = this.X/2; this.y1 = this.y2 = this.Y/2; this.dx = 3; this.dy = 2; } public void paint(Graphics g) { g.setColor(Color.red); g.fillOval((int)(this.x2-3),(int)(this.y2-3),6,6); this.x1 = this.x2; this.y1 = this.y2; } public void start() { if(th_mvball == null) { th_mvball = new Thread(this); th_mvball.start(); } } public void run() { while(true) { try { this.move(); this.repaint(); Thread.sleep(10); } catch(InterruptedException e ) { this.stop(); } } } public void move() { if( y2 > Y ) { y2 = 2*Y - y1 - dy; dy = -dy; } else if ( y2 < 0) { y2 = -y1 - dy; dy = -dy; } else if ( x2 > X) { x2 = 2*X - x1 -dx; dx = -dx; } else if ( x2 < 0) { x2 = -x1 - dx; dx = -dx; } if( x2 < 0 ) { x2 = -x2 ; dx = -dx; } else if ( y2 < 0) { y2 = -y2; dy = -dy; } else if ( x2 > X) { x2 = 2*X - x2; dx = -dx; } else if ( y2 > Y) { y2 = 2*Y - y2; dy = -dy; } x2 = x1 + dx; y2 = y1 + dy; } public void stop() { if(th_mvball!=null) { th_mvball stop(); th_mvball=null; } } } ↑のプログラムをコンパイルすると、「-Xlint: deprecation オプションを指定して再コンパイルしてください」とエラーが出ます。 エラーの対処法、またはプログラムの訂正すべき箇所を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 自作でjavaAppletでゲームを作ろうとしています。

    自作でjavaAppletでゲームを作ろうとしています。 その前段階としてapplet上に円を表示してその位置を(nowx,nowy)としてマウスでクリックもしくはドラッグした先(aimx,aimy)に向かい少しずつ一定速で向かうプログラムを作っているのですが、一度クリックして(nowx,nowy)が(aimx,aimy)に着く前に再び(aimx,aimy)以外の点をクリックして行き先を変えると円の動くスピードが早くなってしまいます。後ドラッグの方はマウスのドラッグしてる位置に円がきてしまっています。 javaをまだちゃんと理解しきってい焼き付け刃の自分ではイロイロ考えてもよくわからず… 助言いただければお願いいたします。 以下ソースコードになります ー-ーーーーーーーーーーーーーーーーーーーーーーーーーーーー import java.applet.*; import java.awt.*; import java.awt.event.*; public class kadai extends Applet{ Color c1=Color.blue; double aimx=0.0,aimy=0.0,vx,vy;//aimは行き先、vx、vyはaimとnowを繋いだ線1を進むだけに進むためのx、yの距離 double nowx=0.0,nowy=0.0;//今いる円の位置 boolean go=true; public void init(){ addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent evt){ if(evt.getX()!=nowx||evt.getY()!=nowy){ stop();c1=Color.red;moveTo(evt.getX(),evt.getY()); aimx=evt.getX();aimy=evt.getY(); start(); }}}); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent evt) { if(evt.getX()!=nowx||evt.getY()!=nowy){ stop();c1=Color.black;moveTo(evt.getX(),evt.getY()); aimx=evt.getX();aimy=evt.getY(); start(); }}}); } public void start(){ go=true; new Thread(new Runnable(){ public void run(){ while(go){ try{Thread.sleep(10); }catch(Exception ex){ } moveTime(); }}}).start(); } public void stop(){ go=false;vx=vy=0.0;repaint(); } public void stop1(){ go=false;vx=vy=0.0;nowx=aimx;nowy=aimy;repaint(); } public void paint(Graphics g){ g.setColor(c1); g.fillOval((int)nowx-20,(int)nowy-20,40,40); } public void moveTo(double x,double y){ double c; vx=x-nowx;vy=y-nowy; c=Math.sqrt(vx*vx+vy*vy); vx=vx/c;vy=vy/c; nowx+=vx;nowy+=vy;repaint(); } public void moveTime(){ if(aimx-1<=nowx&&nowx<=aimx+1&&aimy-1<=nowy&&nowy<=aimy+1)stop1(); nowx+=vx;nowy+=vy; repaint(); }}

    • ベストアンサー
    • Java

専門家に質問してみよう