ページ 11

JAVAのマウスイベントの質問です。

Posted: 2011年2月03日(木) 15:46
by non
お久しぶりです。REGZA Phoneを昨年暮れに購入しました。となれば、やっぱりJAVAを勉強することになりました。
で、本を買いました。「Eclipse3.6ではじめる Javaプログラミング入門」 秀和システム です。
最初から、読み進めながら、プログラムを動かしているのですが、212ページのリスト3.26で、動作しません。
実行すると、ウインドウは表示されますが、マウスでクリックしたところの座標が表示されません。
イベントが発生していないように思えます。なお、付録についているCDのサンプルプログラムがあるのですが、これでも
動作しません。ということは、私がどこかの設定をミスしていることが考えられます。このページにくるまでは、すべて正常に
動作していました。マウスのプログラムはこのページが最初です。どういったことが考えられますか?
ソースは、下の通りです。

コード:

package jp.tuyano.eclipsebook3;

import java.awt.BorderLayout;
import java.awt.event.*;

import javax.swing.*;

/**
 * @author tuyano
 * 
 */
public class SampleApp extends JFrame {
	private static final long serialVersionUID = 1L;
	JLabel l1;

	public SampleApp() {
		this.setSize(300, 200);
		l1 = new JLabel();
		this.add(l1, BorderLayout.NORTH);
		this.addMouseListener(new MyMouseAdapter());
		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new SampleApp();
	}

	class MyMouseAdapter extends MouseAdapter {
		public void mouseClicked(MouseEvent ev) {
			int x = ev.getX();
			int y = ev.getY();
			int n = ev.getClickCount();
			String str = "X:" + x;
			str += " Y:" + y;
			str += " click:" + n;
			l1.setText(str);
		}
	}
}

Re: JAVAのマウスイベントの質問です。

Posted: 2011年2月03日(木) 16:10
by asd
検証済みではないですが、単純にSampleAppクラス(this)に対してラベルの配置を行うのではなく、
getContentPane()メソッドで描画対象ペインを取得して、そのペインに対してラベルを配置したら動作しませんか?

Eclipseを使っているのであれば、イベント内にブレークポイントを設定しておくと、イベントが発生したときに
ブレークポイントに引っかかるかどうかでイベントが発生しているか確認できます。

コード:

import java.awt.BorderLayout;
import java.awt.event.*;

import javax.swing.*;

/**
 * @author tuyano
 * 
 */
public class SampleApp extends JFrame {
	private static final long serialVersionUID = 1L;
	JLabel l1;

	public SampleApp() {
		this.setSize(300, 200);
		l1 = new JLabel();
		getContentPane().add(l1, BorderLayout.NORTH);//ここをthisからgetContentPane()に変えました
		this.addMouseListener(new MyMouseAdapter());
		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new SampleApp();
	}

	class MyMouseAdapter extends MouseAdapter {
		public void mouseClicked(MouseEvent ev) {
			int x = ev.getX();
			int y = ev.getY();
			int n = ev.getClickCount();
			String str = "X:" + x;
			str += " Y:" + y;
			str += " click:" + n;
			l1.setText(str);
		}
	}
}

Re: JAVAのマウスイベントの質問です。

Posted: 2011年2月03日(木) 17:15
by ISLe
JRE(Java Runtime Environment:Java実行環境)のバージョンが古いのではないでしょうか。
最近(いつからだったかは失念)ではJFrameのaddメソッドはContentPaneに転送されるのでgetContentPaneは不要になりました。
本に付属のCDに入っているJDK(&公開JRE)はインストールしましたか?
古いバージョンがインストールしてあるなら特に理由がない限り最新版以外はアンインストールすると良いと思います。

Re: JAVAのマウスイベントの質問です。

Posted: 2011年2月03日(木) 17:41
by non
asdさんのプログラムでは、変化ありませんでした。ブレークをつけたら、予想通り、イベントが発生していません。

ISLeさん
jdk1.6.0_22をインストールしています。本についてきているのは、jdk1.6.0_21です。

なお、Windows7 64Bitです。

Re: JAVAのマウスイベントの質問です。

Posted: 2011年2月03日(木) 18:04
by ISLe
non さんが書きました:ISLeさん
jdk1.6.0_22をインストールしています。本についてきているのは、jdk1.6.0_21です。

なお、Windows7 64Bitです。
ウチはWindows7(x64)のJRE1.6.0_23で質問に書かれたコードが動いてます。

古いバージョンのJDKやJREはインストールされていないですか。
JDKをインストールするときに公開JREもインストールしましたか。
『コントロールパネル』の『プログラムのアンインストール』を開いて確認してみてください。

あと環境変数のCLASSPATHを設定してませんか?
設定しているなら誤動作の原因になるので削除してください。

Re: JAVAのマウスイベントの質問です。

Posted: 2011年2月04日(金) 10:58
by non
ISLeさん
指摘の箇所はすべて問題ないように思えました。
やむなく、すべて、インストールをやり直しました。結果、うまく動くようになりました。
原因はわかりませんが、お世話になりました。

ところで、ISleさんは64ビットのJDKを入れておられるのでしょうか?
私は、現在32ビット版を使用しております。

Re: JAVAのマウスイベントの質問です。

Posted: 2011年2月04日(金) 11:03
by asd
ISLe さんが書きました:JRE(Java Runtime Environment:Java実行環境)のバージョンが古いのではないでしょうか。
最近(いつからだったかは失念)ではJFrameのaddメソッドはContentPaneに転送されるのでgetContentPaneは不要になりました。
本に付属のCDに入っているJDK(&公開JRE)はインストールしましたか?
古いバージョンがインストールしてあるなら特に理由がない限り最新版以外はアンインストールすると良いと思います。
そうだったのですか。それは知りませんでした(ノ∀`)
となるとイベントリスナーが登録されているにも関わらずイベントが発生していないということですね。

Re: JAVAのマウスイベントの質問です。

Posted: 2011年2月04日(金) 17:17
by ISLe
原因がはっきりしないのが気持ち悪いですが、動くようになってよかったですね。
non さんが書きました:ところで、ISleさんは64ビットのJDKを入れておられるのでしょうか?
私は、現在32ビット版を使用しております。
32ビット版→64ビット版の順にインストールして両方使ってます。
IEやEclipseは32ビット版を使っているので32ビット版も必要なのです。
Javaアプリケーションを直接動かすときは64ビット版で動作することになります。
コマンドプロンプトからコンパイラなど使うことが多くせっかくなので使えるときは64ビット版を使いたいと思って入れてます。

"C:\Program Files (x86)\Java\jre6\bin\java.exe"(javaw.exe)を使って起動すると32ビット、
"C:\Program Files\Java\jre6\bin\java.exe"(javaw.exe)を使って起動すると64ビットで動作します。

Re: JAVAのマウスイベントの質問です。

Posted: 2011年2月04日(金) 17:50
by non
ISLeさん
両方入れてもバッティングしないのですね。情報ありがとうございました。