ページ 11

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

Posted: 2013年6月22日(土) 20:27
by たかし
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();
  }
  

}

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

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

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

Posted: 2013年6月23日(日) 09:30
by asd
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クラスのオブジェクトです。

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

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

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

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

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

Posted: 2013年6月23日(日) 17:16
by ISLe
Javaの言語規定には、参照値は「オブジェクトへのポインタ」だとしっかり書いてあるんですけどね。
いろいろめんどうくさいことになるので、「ポインタ」じゃなくて「参照」を使いますけど。

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

Posted: 2013年6月24日(月) 00:23
by asd
ISLe さんが書きました:Javaの言語規定には、参照値は「オブジェクトへのポインタ」だとしっかり書いてあるんですけどね。
いろいろめんどうくさいことになるので、「ポインタ」じゃなくて「参照」を使いますけど。
ご指摘ありがとうございました。
確かにオブジェクトへのポインタと書かれていますね。
ということで私の指摘が大間違いだったようです。
いらぬ指摘をしてしまい申し訳ありませんでした。