javaのイベント処理(アダプタクラス)がうまくいきません。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たかし
記事: 48
登録日時: 12年前

javaのイベント処理(アダプタクラス)がうまくいきません。

#1

投稿記事 by たかし » 12年前

javaでアダプタクラスを使って描画したものをドラッグして動かせるようにしたいです。
しかしコンパイルすると

MouseAdapterDemo2.java:22: エラー: シンボルを見つけられません
MouseAdapterDemo mad;
^
シンボル: クラス MouseAdapterDemo
場所: クラス MyMouseAdapter
MouseAdapterDemo2.java:24: エラー: シンボルを見つけられません
public MyMouseAdapter(MouseAdapterDemo mad) {
^
シンボル: クラス MouseAdapterDemo
場所: クラス MyMouseAdapter
MouseAdapterDemo2.java:13: エラー: シンボルを見つけられません
if (p != null) {
^
シンボル: 変数 p
場所: クラス MouseAdapterDemo2
MouseAdapterDemo2.java:15: エラー: シンボルを見つけられません
g.drawOval(p.x,p.y,40,50);
^
シンボル: 変数 p
場所: クラス MouseAdapterDemo2
MouseAdapterDemo2.java:15: エラー: シンボルを見つけられません
g.drawOval(p.x,p.y,40,50);
^
シンボル: 変数 p
場所: クラス MouseAdapterDemo2
エラー5個

とエラーになってしまいます。
どうすれば描画したものをドラッグして動かせるようになるのでしょうか?
いかが私の作ったプログラムです。
よろしくお願いします。

コード:

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class MouseAdapterDemo2 extends Applet {

  public void init() {
  	Point p;
    addMouseListener(new MyMouseAdapter(this));
  }
  
    public void paint(Graphics g) {
    if (p != null) {
      
		g.drawOval(p.x,p.y,40,50);
	  
    }
 }
}

class MyMouseAdapter extends MouseAdapter {
  MouseAdapterDemo mad;

  public MyMouseAdapter(MouseAdapterDemo mad) {
    this.mad = mad;
  }

  public void mousePressed(MouseEvent me) {

	mad.p = me.getPoint();
    mad.repaint();
  }
  
    public void mouseDragged(MouseEvent me) {
    mad.p = me.getPoint();
    mad.repaint();
  }
  

}

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: javaのイベント処理(アダプタクラス)がうまくいきません。

#2

投稿記事 by へにっくす » 12年前

playhuman さんが書きました:MouseAdapterDemo2.java:22: エラー: シンボルを見つけられません
MouseAdapterDemo mad;
^
シンボル: クラス MouseAdapterDemo
場所: クラス MyMouseAdapter
MouseAdapterDemo2.java:24: エラー: シンボルを見つけられません
public MyMouseAdapter(MouseAdapterDemo mad) {
^
単なるスペルミスですかね。
addMouseListener(new MyMouseAdapter(this));でMouseAdapterDemo2のポインタを渡してますけど何か気付きませんか?
written by へにっくす

アバター
asd
記事: 319
登録日時: 14年前

Re: javaのイベント処理(アダプタクラス)がうまくいきません。

#3

投稿記事 by asd » 12年前

playhuman さんが書きました:javaでアダプタクラスを使って描画したものをドラッグして動かせるようにしたいです。
しかしコンパイルすると

MouseAdapterDemo2.java:22: エラー: シンボルを見つけられません
MouseAdapterDemo mad;
^
シンボル: クラス MouseAdapterDemo
場所: クラス MyMouseAdapter
コンパイル方法が不明ですが、コンパイルでエラーになった場合は、先頭から順に解決していきましょう。
一つでもエラーが出るとそれに引きずられてエラーが増えることがあります。

上記のエラーの通り「クラスMouseAdapterDemoシンボルを見つけられません(=ふぇ、MouseAdapterDemoクラスが見つからないよぅ)」とのことです。
提示されたコード内にはMouseAdapterDemo2クラスとMyMouseAdapterクラスの2つしかないようですが、
どこか別のファイルにMouseAdapterDemoクラスがあるのでしょうか。

もし別のjavaファイルにMouseAdapterDemoクラスがあるのであれば、そのjavaファイルも同時にコンパイルすれば
無事にMouseAdapterDemoクラスのシンボルを見つけてくれます。

例)今回提示のプログラムがMouseAdapterDemo2.java、MouseAdapterDemoクラスが定義されているのがMouseAdapterDemo.javaの場合
javac -cp . MouseAdapterDemo2.java MouseAdapterDemo.java

もし上記のコンパイルでエラーが出た場合には、MouseAdapterDemoクラスも提示した上で再度質問してくださいね(*´ヮ`)

[hr]
で、ここから推測での回答になりますが、おそらく指定したかったのはMouseAdapterDemo2クラスだと思うので
MouseAdapterDemoクラスを指定しているところをMouseAdapterDemo2クラスに直してください。

次に
MouseAdapterDemo2.java:13: エラー: シンボルを見つけられません
if (p != null) {
^
シンボル: 変数 p
場所: クラス MouseAdapterDemo2
ここでつまづくと思います。
もし、変数pはMouseAdapterDemo2クラスで宣言しているじゃないかと思われたら、MyMouseAdapter2クラスの変数pの指定位置に注意してください。

コード:

  public void init() {
    Point p;
    addMouseListener(new MyMouseAdapter(this));
  }
initメソッドで宣言された変数pはinitメソッドを終えると同時に参照できなくなります。
このクラス中で参照したいのであれば、メソッドの外で宣言してください。

へにっくす さんが書きました: 単なるスペルミスですかね。
addMouseListener(new MyMouseAdapter(this));でMouseAdapterDemo2のポインタを渡してますけど何か気付きませんか?
スペルミス+フィールドの宣言位置誤りかと思われます。
あと、javaにポインタはありません。引数として渡しているのはMyMouseAdapterクラスのオブジェクトです。
Advanced Supporting Developer
無理やりこじつけ(ぉ

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: javaのイベント処理(アダプタクラス)がうまくいきません。

#4

投稿記事 by へにっくす » 12年前

asd さんが書きました:スペルミス+フィールドの宣言位置誤りかと思われます。
あと、javaにポインタはありません。引数として渡しているのはMyMouseAdapterクラスのオブジェクトです。
指摘ありがとうございます
C++と混同してました;;
m(__)m
written by へにっくす

アバター
asd
記事: 319
登録日時: 14年前

Re: javaのイベント処理(アダプタクラス)がうまくいきません。

#5

投稿記事 by asd » 12年前

オフトピック
へにっくす さんが書きました:
asd さんが書きました:スペルミス+フィールドの宣言位置誤りかと思われます。
あと、javaにポインタはありません。引数として渡しているのはMyMouseAdapterクラスのオブジェクトです。
指摘ありがとうございます
C++と混同してました;;
m(__)m
つい気になったので指摘してしまいました(ノ∀`)
私もjava、C#寄りで逆にポインタが分からなくなることがあるので、その際はよろしくご指南/ご指摘くださいませ(*´ヮ`)
Advanced Supporting Developer
無理やりこじつけ(ぉ

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: javaのイベント処理(アダプタクラス)がうまくいきません。

#6

投稿記事 by ISLe » 12年前

Javaの言語規定には、参照値は「オブジェクトへのポインタ」だとしっかり書いてあるんですけどね。
いろいろめんどうくさいことになるので、「ポインタ」じゃなくて「参照」を使いますけど。

アバター
asd
記事: 319
登録日時: 14年前

Re: javaのイベント処理(アダプタクラス)がうまくいきません。

#7

投稿記事 by asd » 12年前

ISLe さんが書きました:Javaの言語規定には、参照値は「オブジェクトへのポインタ」だとしっかり書いてあるんですけどね。
いろいろめんどうくさいことになるので、「ポインタ」じゃなくて「参照」を使いますけど。
ご指摘ありがとうございました。
確かにオブジェクトへのポインタと書かれていますね。
ということで私の指摘が大間違いだったようです。
いらぬ指摘をしてしまい申し訳ありませんでした。
Advanced Supporting Developer
無理やりこじつけ(ぉ

閉鎖

“C言語何でも質問掲示板” へ戻る