リスナーを別クラスで書いた時のエラーの意味と原因

このQ&Aのポイント
  • リスナーを別クラスで書いた時に「maのコンストラクタが未定義」というエラーが出る意味と原因を教えてください。
  • 質問者は、参考書を見ながらリスナーを別クラスで書いていますが、maクラスのコンストラクタを「public void ma」とするとエラーが発生しています。
  • 質問者は、このエラーがどのような意味を持ち、その原因について知りたいと思っています。
回答を見る
  • ベストアンサー

リスナーを別クラスで書いた時のエラーの意味と原因?

   今晩は。  参考書を見ながら、リスナーを別クラスで書いてみました。  maクラスのコンストラクタを「public void ma」にすると「maのコンストラクタが未定義」 ですというエラーが出ます。  これはどのような意味でしょうか、よろしくお願いします。 ================================================================================= public class applet extends Applet { String s = "Hello" ; public void init() { addMouseListener(new ma(this)); } public void paint(Graphics g) { g.drawString( s , 60 , 60 ) ; } } class ma extends MouseAdapter { applet a ; public /*void*/ ma(applet ap) { a = ap ; } public void mouseClicked(MouseEvent e) { a.s = "JAVA" ; a.repaint() ; } }

  • Java
  • 回答数4
  • ありがとう数2

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

  • ベストアンサー
  • covachan
  • ベストアンサー率38% (46/120)
回答No.3

># これはもう少し具体的に説明して頂くとどのような意味になるのでしょうか。 これこそ、1さんのいうとおり仕様書を読んで理解してください。 簡単に言うと、すべてのクラスはObjectクラスを親に持ちます。 そのObjectクラスから継承され、許可されたすべての実装を初期で持ちます。 つまり、appletを引数にもつコンストラクタが継承されたすべての クラスの中に存在しないということです。

eiji_0035
質問者

お礼

covachanさん、有難うございました。    もう少し勉強します。

その他の回答 (3)

回答No.4

ma 側のソースで別のコンパイルエラーとかが出ているとか ないですか? ma の引数付きコンストラクタはちゃんと有るのに未定義エラーになっているのは 変だし、ma の引数付きコンストラクタは親のデフォルトコンストラクタ を呼び出しているので、java のソースとしては問題は無いように思えます。

  • covachan
  • ベストアンサー率38% (46/120)
回答No.2

コンストラクタは public ma メソッドは public void ma で、new ma(this))の個所で 引数にappletを与えるコンストラクタを呼んでいますが、 継承元のコンストラクタにappletを引数にするものがないということです。

eiji_0035
質問者

お礼

 回答有難うございます。  コンストラクタとメソッドを正確に理解出来ていませんでした。 >引数にappletを与えるコンストラクタを呼んでいますが、  継承元のコンストラクタにappletを引数にするものがないということです。 # これはもう少し具体的に説明して頂くとどのような意味になるのでしょうか。  宜しくお願いします。 

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

困ったら仕様を見る.

参考URL:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8

関連するQ&A

  • 「ScrollPane」のイベントの取得方法は?(AWT)

    タイトルのままなのですが、「ScrollPane」のイベント取得方法が知りたいのです。 例えばマウスのイベントを取得する時は下記のようにしますよね。 ************************************************* panel1.addMouseListener(new panel1_MouseAdapter(this)); ************************************************* class panel1_MouseAdapter extends java.awt.event.MouseAdapter { Panel_main adaptee; panel1_MouseAdapter(Panel_main adaptee) { this.adaptee = adaptee; } public void mouseClicked(MouseEvent e) { adaptee.panel1_mouseClicked(e); } } ************************************************* void panel1_mouseClicked(MouseEvent e){ //ここに処理を書く } ************************************************* 「ScrollPane」のスクロールされたとか、↓↑がクリックされたなどスクロール特有のイベントを取得したいのです。

    • ベストアンサー
    • Java
  •  paint( )メッソドをオーバーロードについて

     paint( )メッソドをオーバーロードについて  今晩は、JAVA初心者です、宜しくお願いします。  paint( )メッソドをオーバーロードする時に、<< A >>のコードはそのまま、  g.drawStringを書いていますが、<< B >>のコードでは、  super.paint( )で親クラスを呼んでやらないと、エラーになります。  この両者の違いが全く理解出来ません、どこがどのように違うのでしょうか。  宜しくお願い致します。 ======================================== << A >> public class Sample extends Applet { public void paint(Graphics g) { g.drawString("Applet",50,50); } } ======================================= << B >> public class JFrame_Test extends JFrame { JFrame_Test() { setSize(400,300); setTitle("JFrame_Test"); } public void paint(Graphics g) { super.paint(g); g.drawString("Today",70,70); } public static void main(String[] args) { JFrame jf = new JFrame_Test(); jf.setVisible(true); } } ========================================

    • ベストアンサー
    • Java
  • コンパイル時のエラーの件

    html上にJavaを表示させようとして、いちばん簡単なプログラム以下を作りました import java.applet.Applet; import java.awt.Graphics; public class hello extends Applet { public void paint (Graphics g ) { g.drawsString ("Hello Java Applet !",20,20); } } その後コンパイルしようとしたのですが、次のようなエラーメッセージが現れました。(特に.awtというのが全くわからないのです。) hello.java:1: シンボルを解釈処理できません。 シンボル: クラス applet 位置 : java の クラス import java.applet.applet; ^ hello.java:2: シンボルを解釈処理できません。 シンボル: クラス awt 位置 : java の クラス import java.awt.graphics; ^ hello.java:4: シンボルを解釈処理できません。 シンボル: クラス applet 位置 : hello の クラス public class hello extends applet { ^ hello.java:5: シンボルを解釈処理できません。 シンボル: クラス graphics 位置 : hello の クラス public void paint (graphics g ) { ^ なにか設定などがおかしいのでしょうか?教えてください。

    • ベストアンサー
    • Java
  • 配列で作ったオブジェクトのイベントを取得するには?

    下記のクラス内で"ary"という10枚のパネルのオブジェクトを配列で作成しました。その"ary"パネルがクリックされた時のイベントを書きたいのですが、私の書いたロジックではイベントを取得できませんでした。 なにか良い方法がありませんでしょうか? public class Main_Panel extends Panel{ int y = 0; Panel ary[] = new Panel[10];   //CONSTRUCT public MainPanel() { for(int i = 0 ; i < 10; i++ ){ ary[i] = new Panel() this.add(ary[i], null); ary[i].setBounds(new Rectangle(0, y, 5, 5)); intYPos = intYPos + 10; ary[i].addMouseListener(new ary_MouseAdapter(this)); } } //パネル(ary)クリックイベント void ary_mouseClicked(MouseEvent e){ } } class ary_MouseAdapter extends java.awt.event.MouseAdapter { Main_Panel adaptee; ary_MouseAdapter(Main_Panel adaptee) { this.adaptee = adaptee; } public void mouseClicked(MouseEvent e) { adaptee.ary_mouseClicked(e, num); } }

    • ベストアンサー
    • Java
  • 【java applet】他のクラスを呼び出して図形を描写するには

    はじめまして。 非常に簡単なことで、申し訳ないのですが質問させていただきます。 アプレットをextendsしたAppクラスで 他のMakeImgクラスのインスタンス(mi)を 作成し、MakeImgクラスのペイントメソッドを 実行して、図形を描写したいのですが、 下記のプログラムではコンパイルできても 図形が描写されません。 ペイントメソッドは明示的に呼び出さなくても 呼ばれるはずなので図形を描いてくれてもよさそうなのですが。。。 どなたか詳しい方、同じような問題を経験した方がいらっしゃったらぜひ回答していただければと思います。 それではよろしくお願い致します。 ////////////////////////////////////////////// import java.applet.Applet; import java.awt.*; /* <applet code="App.class" width="300"height="300"> </applet> */ public class App extends Applet {  MakeImg mi;  public void init()  {   mi = new MakeImg();  } } class MakeImg {  public void paint(Graphics g)  {   g.setColor(Color.white);   g.fillRect(0 , 0 , 300 , 300);   g.setColor(Color.black);   g.drawString("test",40,30);  } }

  • 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
  • load:class HelloWorld not found

    アプレットの表示でIEのステータスバーが load:class HelloWorld not found になります。 英語のパスだし、長いフォルダ名も無いし、原因らしいものは心当たりありません。 他の人が作ったクラスなら普通に表示できました。 僕が作ったクラスがおかしいのかもしれません。 import java.applet.*; import java.awt.*; public class HelloWorld extends Applet { public void paint(Graphics g){ g.drawString("Hello World", 20, 20); } } をコンパイルしたMD5やダンプを教えてもらえませんか。

    • ベストアンサー
    • Java
  • 簡単なこーどですが、エラーの原因が分かりません

    今晩は、JAVAの初心者です、宜しくお願いします。 下のコードでエラーがでます、いくら考えても原因がさっぱり分かりません。 一体何処が悪いのでしょうか、宜しくお願いします。 また、最後の「j.show();」では警告が出ています。 何が原因でしょう?? ============================================================ import java.awt.Graphics; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; class JFrame_Ohayou extends JFrame implements WindowListener{ /*********** コンストラクタ ********************/ public JFrame_Ohayou(){ setSize(400,300); setTitle("JFrameのテスト"); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } /******************* paint ***********************/ public void paint(Graphics g){ super.paint(g); g.drawString("おはよう",20,40); } } /******************* main ***********************/ public class JFrameTest{ public static void main(String[] args){ JFrame_Ohayou j = new JFrame_Ohayou(); j.show(); } } =============================================================

    • ベストアンサー
    • Java
  • アプレットの配列をテキスト形式で保存する

    ある画像の上をマウスクリックするとそこに赤いマーカーが表示され、さらにそのマーカーの座標をテキスト形式で保存できるプログラムを組みたいと考えています。マーカー表示はできましたが、保存方法がまったくわかりません。35箇所のマーカー座標を保存したいのですが…。 どなたか教えていただけませんでしょうか。 ブラウザ上で動作させたいので、JavaAppletにて組んでいます。 import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class sample extends Applet{ private int[] xpos = new int[35]; private int[] ypos = new int[35]; private int num = 0; Image imgs; public sample(){ addMouseListener(new MyMouseAdapter()); } public void init(){ imgs = getImage(getDocumentBase(),"sample.gif"); } public void paint(Graphics g){ g.drawImage(imgs,0,0,this); g.setColor(Color.red); for(int i = 0; i < num; i++){ g.fillOval(xpos[i]-2, ypos[i]-2, 4, 4); } } class MyMouseAdapter extends MouseAdapter { public void mouseClicked(MouseEvent e){ if(num >= 35){ return; } int x,y; x = e.getX(); y = e.getY(); xpos[num] = x; ypos[num] = y; num++; Graphics g = getGraphics(); g.setColor(Color.red); g.fillOval(x-2, y-2, 4, 4); } } }

  • javaのイベント処理についての質問

    今、以下の課題に取り組んでいるのですが、「新しくクリックした座標点で円を描くだけでなく、 以前にクリックした座標点での円も全て表示するように」というところのプログラミング方法がわかりません。 現在のソースは実行してもクリックしたところに円が表示されるようにできたのですが、別の場所をクリックすると以前の円は消えてしまいます。 どなたか詳しい方教えていただけませんでしょうか。 問題文↓ 図のように、マウスクリックした位置に円を描くアプレットを作成せよ。円の数は最大10個までとする。なおマウスクリックした位置は、 public void mouseClicked(MouseEvent e) とすると e.getX(); e.getY(); というメソッドでint型のx,y座標点として得られる。 クリックした座標点を記憶しておくために、点の位置は、xp[i]、yp[i]のように配列を使用し、新しくクリックした座標点で円を描くだけでなく、 以前にクリックした座標点での円も全て表示するように、プログラムを作成すること。 なお、メソッドmouseClicked(MouseEvent e)とメソッドpaint(Graphics g)に共通して座標点を扱うために座標点はグローバル宣言を必要とする。 ソース import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class Marble extends Applet { int xp; int yp; public void init(){ MsListener mouseListener=new MsListener(); setBackground(Color.white); addMouseListener(mouseListener); } class MsListener extends MouseAdapter{ public void mouseClicked(MouseEvent e){ xp=e.getX(); yp=e.getY(); repaint(); } } public void paint(Graphics g){ final int MAX=20,WIDTH=200,HEIGHT=200; g.draw3DRect(0,0,WIDTH-2,HEIGHT-2,false); g.setColor(Color.blue); g.fillOval(xp-5,yp-5,10,10); } } どうかよろしくお願いします。