• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アップレットのアクションリスナーが動作しません)

アップレットのアクションリスナーが動作しません

ngsvxの回答

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.7

>実装してやると「インターフェイスのメソッドが重複しています」とのエラーが出ます。 #5のお礼に記述されたコードに実装してもそのようなメッセージは出ないと思います。 すでにこのコードとはかなり違うものになっていませんか? 違うコードになっていると、こちらからは適切なアドバイスはできません。 #2のお礼にあるコードに#3の回答を修正したものが、#4でうまくいっているようなので、 そこから、やり直したほうが早いかもしれません。 ># このような書き方は、具体的にはどのように書くのでしょうか。  また、プログラムの書き方としては良くないというのはどのような理由なのでしょうか。 これはケースバイケースなのですが、今回はやめたほうがいいと思います。 この方法では、Canvasで発生したイベントを、Appletで処理することになります。 すると、CanvasとAppletの関係が密となり、切り離せない関係となります。 そうすると、プログラムの変更/修正などがしにくいプログラムとなってしまうのが理由です。 クラスはなるべく関係性を疎にしておいたほうが応用が利きやすいのです。 最初の方法、つまりCanvasで発生したイベントをCanvasで処理するということは、 処理がCanvasで完結し、Canvasの独立性が保たれます。 さて、具体的な方法ですが、 イベントのリスナーに定義されるメソッドの引数は、EventObjectを継承したものですので、getSource()というメソッドで、イベントを発生させたオブジェクトを取得できます。 これを使って、処理を振り分けます。 public void mouseClicked(MouseEvent e) {  Object sourceObject = e.getSource();  if( sourceObject == canvasObject ){   //Canvas用の処理  }  if( sourceObject == appletObject ){   //Applet用の処理  } } なお、「canvasObject 」「appletObject 」は、インスタンス変数としておくことが必要です。

dikon_007
質問者

お礼

 回答有難う御座います。  何とかうまく動くようになりました。  インスタンス変数を作ってイベントの振分けの方法も勉強しているのですが、その方法が分かりません。    下のように書いてやりましたが、うまく実行できません。  宜しくお願いします。   =================================================================== public class ActionTest6 extends Applet implements MouseListener { Canvas cs ; boolean flag = false ; Graphics g ; myCanvas mc ; boolean flag2 = false ; public void init() { this.setBackground(Color.pink); this.addMouseListener( this ) ; myCanvas mc = new myCanvas( this , flag2) ; this.addMouseListener( mc ) ; this.add( mc ) ; } public void paint( Graphics g ) { if( flag == true ) { g.fillRect( 50 , 50 , 10 , 10 ) ; } } public void mouseClicked( MouseEvent e ) { Graphics g = getGraphics() ; setBackground( Color.cyan ) ; flag = true ; repaint(); } public void mouseEntered( MouseEvent e ) { Object sourceObject = e.getSource(); if( sourceObject == mc ) { flag2 = true ; } } public void mouseExited(MouseEvent arg0) { } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { } class myCanvas extends Canvas implements MouseListener { ActionTest6 a ; boolean fc = false ; public myCanvas( ActionTest6 a , boolean f) { this.a = a ; this.fc = f ; setBackground( Color.green ) ; setSize( 100 , 100 ) ; addMouseListener( this ) ; } public void paint( Graphics g ) { g.setColor( Color.black ) ; g.drawOval( 10 , 10 , 20 , 20 ) ; if(fc == true) { mc.setBackground( Color.black ) ; repaint() ; } } public void mouseEntered(MouseEvent e) {} public void mouseClicked(MouseEvent e) { } public void mouseExited(MouseEvent arg0) { } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { } } }

関連するQ&A

  • AWTの質問

    以下のようなコードを書きました。円の中をクリックすると赤色に塗りつぶしたいようにしたいのですが、現状だとどこをクリックしても赤色に塗りつぶされます。(クリックした座標が円の範囲にあれば。。)というような処理を付け加えたいのですが手順がわかりません。コードで示してもらえると助かります。 import java.applet.*; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class En extends Applet implements MouseListener{ public void init() { this.addMouseListener(this); } public void paint(Graphics g) { g.fillOval(20, 25, 500, 400); } public void mouseClicked(MouseEvent e) { Graphics g = getGraphics(); g.setColor(Color.red); //ここに何か書くべきと思われる g.fillOval(20, 25, 500, 400); } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }

    • ベストアンサー
    • Java
  • 描写した文字をドラッグしたい

    テキストフィールドに文字をキーボードから一文字(最終的に文字列にするつもりです)入力し、クリックすると文字を描写するというプログラムをjavaで作成しました。 今度は描いた文字をドラッグして移動したいのです。ですが考えても方法が思いつきません。 移動だけでなく、描いてから文字の修正や文字をドラッグすることでドラッグされた文字を配列に入力できるようにするつもりです。 またウインドウサイズを変更すると消えてしまいます。これは調べたところ再描写されるからだとわかりました。ですが対処方法がいまいち理解できませんでした。書いたものを残しておくというのがよくわかりません。サイズ変更したらその都度描写を今までのもの全てし直すということですか?それは描写が増えれば処理が遅くなりそうな気がするのですが。 とりあえず簡単に作った文字入力のプログラムです。よろしくお願いします。 import java.awt.*; import java.applet.*; import java.awt.event.*; public class DrawString extends Applet implements MouseListener,KeyListener{ int x1,x2,y1,y2; TextField test1 = new TextField(30); char str1; String str="testda"; int n=0; public DrawString(){ addMouseListener(this); test1.addKeyListener(this); add(test1); setForeground(Color.black); setBackground(Color.white); } public void mouseClicked(MouseEvent arg0) {} public void mouseEntered(MouseEvent arg0) {} public void mouseExited(MouseEvent arg0) {} public void mousePressed(MouseEvent arg0) { // TODO 自動生成されたメソッド・スタブ arg0.consume(); x1 = arg0.getX(); y1 = arg0.getY(); repaint(); } public void mouseReleased(MouseEvent arg0) {} public void paint(Graphics g){ g.drawString(str1+"。",x1,y1); } public void keyPressed(KeyEvent arg0) {} public void keyReleased(KeyEvent arg0) {} public void keyTyped(KeyEvent arg0) { n++; str1 = arg0.getKeyChar(); } public void update(Graphics g){ paint(g); } }

    • ベストアンサー
    • Java
  • 画面のちらつきの原因が知りたいです

    JAVAの初心者です、宜しくお願いします。 下のようなプログラムを書きました。 「public void paint(Graphics g){ ~ repaint();」とすると、画像がちらつきます、しかし、「repaint();」を消すとちらつかなくなります、この原因が分かりません。 一体何故このような現象が起こるのでしょうか、宜しくお願いします。 ========================================================== import java.applet.Applet; import java.awt.Button; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class Oval_Rec_1_071128 extends Applet implements MouseListener , ActionListener { int x1 ; int y1 ; int xh = 50 ; int yv = 50 ; Button bt1 ; Button bt2 ; public void actionPerformed(ActionEvent ae){} public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void init() { setBackground(Color.yellow); addMouseListener(this); bt1 = new Button("push"); bt1.setFont(new Font("SansSerif", Font.BOLD, 20)); bt1.setBackground(Color.black); bt1.setForeground(Color.lightGray); add(bt1); bt1.addActionListener(this); bt2 = new Button("change_circle"); add(bt2); bt2.addActionListener(this); } public void mousePressed(MouseEvent e) { x1 = e.getX(); y1 = e.getY(); xh = e.getX(); yv = e.getY(); // repaint(); //comment out } public void paint(Graphics g) { g.setColor(Color.red); g.setFont(new Font("Serif",Font.BOLD,24)); g.drawString("Hello Applet World ! !" , 50 , 50); g.setColor(Color.blue); g.drawLine( 100 , 100 , 500 , 500); g.setColor(Color.cyan); g.fillOval( x1 , y1 , xh , yv); g.setColor(Color.magenta); g.fillRect( xh , yv, x1/10 , y1/10 ); repaint(); } }

    • ベストアンサー
    • Java
  • アクションリスナー(初心者です)

    JAVAでボタンが押されたらすでに描かれている線に さらに線が加わって描かれるというプログラムを作ろうとしているのですが、アクションリスナーを受け取ったメソッドの中身をどうしたらいいのか行き詰まりました・・・作りかけのプログラムを載せてみますので アドバイスいただければと思います よろしくお願いします import java.applet.Applet; import java.awt.Graphics.*; import java.awt.event.*; import java.awt.*; public class file928 extends Applet implements ActionListener { Button botan; public void init() { botan=new Button("選択"); add(botan); botan.addActionListener(this); } public void paint(Graphics g) { g.drawString("L.A.Airport",100,300);           ~中略~ g.drawLine(405,420,655,240); } public void actionPerformed(ActionEvent x) { ーここをどうしたらいいかわかりません・・・ー } }

    • ベストアンサー
    • Java
  • Javaのアプレットについて質問です。

    星型の図形をアプレットビューワ上でマウスを押した場所に移動させたいのですが・・・ import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.awt.Polygon; public class Enshu1_5 extends Applet implements MouseListener { int px []={100,80,10,70,40,100,160,130,190,120}; int py []={10,75,75,113,190,140,190,113,75,75}; private Polygon poly = new Polygon(px,py,10 ); public void init() { addMouseListener(this); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.setColor(Color.red); g.fillPolygon(poly); g.setFont(new Font("serif",Font.BOLD,24)); g.drawString("Star",100,200); } } こんな感じでつくってみたのですが現在位置とクリック位置との差分割り出し方をpublic void mouseClicked(MouseEvent e)の所に書きたいのですが普通にpoly.translate( e.getX(), e.getY() );をしてしまうと原点からの移動になってしまうため、フィールド上にint x=0,y=0をつくりmouseClickedのところで if(e.getX()>x&&e.getY()>y) { int dx=e.getX()-x; int dy=e.getY()-y; x=dx; y=dy; poly.translate(dx,dy); repaint(); }の様な感じで考えられる条件を条件分岐していこうと思ったのですがどうもうまくいきませんしかなりかさばったものになってしまうと思います。何かいい方法はないでしょうか? 教えて下さい><

    • ベストアンサー
    • Java
  • java リアルタイムでマウスの座標を取得したい

    マウスのリアルタイム座標を取得したいのですが、 以下のソースを作りました。 しかし、リアルタイムどころか、マウスをクリックしても座標が取得できません どこを修正すればいいのでしょうか? import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.awt.event.MouseEvent; import java.net.URL; import java.awt.Image; /*<applet code="applet001" width="640" height="480"></applet>*/ public class applet001 extends Applet implements MouseListener, MouseMotionListener { Dimension dim; int mouse_x, mouse_y; //アプレットの初期化時呼び出される public void init() { dim = getSize(); addMouseListener( this ); } public void update(Graphics g) //オーバーライドして最低限のことだけをする { paint(g); } public void paint(Graphics g) { g.drawString( "マウス:" + mouse_x + "," + mouse_y, 60, 120 ); g.fillOval(mouse_x,mouse_y,30,30); } // マウスの処理 public void mousePressed( MouseEvent e ) { mouse_x = e.getX(); mouse_y = e.getY(); } public void mouseClicked( MouseEvent e ) {} public void mouseReleased( MouseEvent e ) {} public void mouseEntered( MouseEvent e ) {} public void mouseDragged( MouseEvent e ) {} // public void mouseExited( MouseEvent e ) {} // public void mouseMoved( MouseEvent e ) { mouse_x = e.getX(); mouse_y = e.getY(); repaint(); } }

    • ベストアンサー
    • Java
  • アプレットでマウスイベントが出ない

    クリックしても反応しません。 また、マウスイベントが発生したときに飛ぶメソッドにSystem.out.printlnを入れるとException in thread "AWT-EventQueue-0" java.lang.NullPointerException: component argument pDataが出ることがあります。 import java.applet.Applet; import java.awt.Graphics; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; public class NewJApplet extends javax.swing.JApplet implements MouseListener{ int x = 10; int y = 10; public void init() { x = 50; y = 50; } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed( MouseEvent e ){ x = e.getX(); // マウスがクリックされた位置のx座標を取得する y = e.getY(); // マウスがクリックされた位置のy座標を取得する repaint(); // アプレットの再描画を指示する } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.fillOval(x,y,10,10); } } 使ってるのは jre1.6.0_01 NetBeans 5.5です

    • ベストアンサー
    • Java
  • ★滑らかな画像切り替え★

    アプレットを用いてスライドショーのようなものを作成しようと考えています。 しかしながら、画像を読み込むまでに時間がかかり、滑らかにつなぎたいのに、コマ送りのようになってしまいます。 できる限り断続的ではなく連続に見えるようにしたいと考えているのですが、良い方法はないでしょうか? 画像に関してはJavaScriptの方が有効だとするサイトが多すぎて悩んでいます。 プログラムを載せておきます。尚、画像はどれも800×600のサイズです。 import java.awt.*; import java.applet.*; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; public class S1 extends Applet implements MouseListener {   Image img;   int Flag=0;   public void init()   {     addMouseListener(this);     setSize(800,600);   }   public void paint(Graphics g){     switch(Flag){     case 0:img=getImage(getCodeBase(),"../image/bg001.jpg"); break;     case 1:img=getImage(getCodeBase(),"../image/bg002.jpg"); break;     default:img=getImage(getCodeBase(),"../image/bg003.jpg"); break;     }     g.drawImage(img,0,0,this);   }   public void mouseClicked(MouseEvent e) {     Flag++;     repaint();   }   public void mouseEntered(MouseEvent e) {}   public void mouseExited(MouseEvent e) {}   public void mousePressed(MouseEvent e) {}   public void mouseReleased(MouseEvent e) {} } 改善点などもあれば是非!

    • ベストアンサー
    • Java
  • 【アプレット】マウスイベントについて

    【アプレット】マウスイベントについて 現在、マウスに円をリンクさせています 1回左クリックするとその場所で円が停止し、もう1回左クリックするとまた動きだし、もう1回左クリックするとその場所で円が停止し、・・・の繰り返しを行いたいです なにかアドバイスをください。 作ってるのに近いプログラム ↓ import java.applet.* ; import java.awt.*; import java.awt.event.*; public class test extends Applet { int posX = 50; int posY = 50; public void paint(Graphics g) { g.setColor(Color.red); g.fillOval(posX, posY, 50, 50); } public void mousePressed( MouseEvent e ){ x = e.getX(); y = e.getY(); repaint(); } public void init () { this.setSize(200, 200); this.setVisible(true); addMouseMotionListener(new MouseMotionAdapter() { public void mouseMoved(MouseEvent e) { posX = e.getX(); posY = e.getY(); repaint(); } public void mousePressed( MouseEvent e ){ x = e.getX(); y = e.getY(); repaint(); } public void mouseReleased(MouseEvent e){ } public void mouseClicked(MouseEvent e){ } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } }); } }

  • JavaAppletのプログラム添削をお願いします

    初心者です。宜しくお願いします。 JAVA Appletで、クリックするたびに画像が変わるものを作りたいのですが、上手くいきません。 プログラムの添削をお願い致します。 JAVA Appletを利用し、画面をクリックするたびに画像が変わるアプリを作りたいのですが、上手くいきません。 ※コンパイルは通るのですが、実行しても何も表示されません。 [参考URL]http://www.geocities.jp/supermisosan/javastudy/mousechange.html この、画像を変えただけのものを作れればOKです。 以下、今私の書いたプログラム内容です。 書いたと言っても、コピペして部分部分を変えただけですが‥。 【click.java】 import java.applet.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class click extends JApplet implements MouseListener { Image siro,kiiro,aka2,img; int x=0; Image image[]=new Image[5]; Graphics g; public void init() { addMouseListener(this); image[0]=getImage(getDocumentBase(),getParameter("siro.gif")); image[1]=getImage(getDocumentBase(),getParameter("kiiro.gif")); image[2]=getImage(getDocumentBase(),getParameter("aka2.gif")); image[3]=getImage(getDocumentBase(),getParameter("aka2.gif")); image[4]=getImage(getDocumentBase(),getParameter("aka2.gif")); setBackground(Color.white); } public void paint(Graphics g) { g.drawImage(image[x],0,0,this); } public void mouseClicked(MouseEvent me) { x++; if(x==5) x=0; repaint(); } public void mouseEntered(MouseEvent me) { } public void mouseExited(MouseEvent me) { } public void mousePressed(MouseEvent me) { } public void mouseReleased(MouseEvent me) { } } 【click.html】 <html> <head> <title>test applet</title> </head> <body> <applet code="click.class" width=500 height=500> </applet> <hr> <a href="click.java"> source file </a> </body> </html> 何が足りないのでしょうか? 勉強不足ですみません、宜しくお願い致します!!