質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

535閲覧

java swing マウス位置取得について

akayon

総合スコア32

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2017/07/11 14:28

編集2017/07/11 14:28

###困っていること

java

1コード 2public void mouseMoved(MouseEvent e){ 3 int x = e.getX(); 4 int y = e.getY(); 5 6 jl.setHorizontalAlignment(SwingUtilities.CENTER); 7 jl.setText(x+","+y); 8 }

jl というのは表示されるラベルです。

マウスが動くごとに毎回位置情報の数値を出力して欲しいのですが、全く出てきません。
ちなみに Entered , Clicked の時は動作しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

追記1: コメント拝見しました。

以下のようにされているとのことですが、それは自分の最初の回答のコードと意味的に同じです。

java

1jl2.addMouseListener(new MouseInputAdapter() { 2 @Override public void mouseClicked(MouseEvent e) { ... } 3 @Override public void mouseEntered(MouseEvent e) { ... } 4 @Override public void mouseMoved(MouseEvent e) { ... } 5});

MouseInputAdapterは複数のマウスイベント用のクラスですが、このクラスをaddMouseListenerに渡してもmouseClicked/mouseEnteredしか起動されません。(おそらくMouseInputAdapterにmouseMovedが定義されているので、addMouseListenerとすればそれが起動されると勘違いしておられるのではないかと思います。最初の回答は「例えMouseMotionListenerを実装したインスタンスであっても、それをaddMouseListenerで登録しただけではmouseMovedは起動されない」ということだったのですが、分かりにくかったかもです。)

次のようにすればmouseMovedが起動されるようになるはずです。

java

1// MouseListener, MouseMotionListenerなど複数のインターフェースを備えたリスナー 2// インスタンスを一旦生成する。 3MouseInputAdapter mouseInputListener = new MouseInputAdapter() { 4 @Override public void mouseClicked(MouseEvent e) { ... } 5 @Override public void mouseEntered(MouseEvent e) { ... } 6 @Override public void mouseMoved(MouseEvent e) { ... } 7}; 8// 生成したリスナーインスタンスを以下のように複数の目的のリスナーとして登録する 9jl2.addMouseListener(mouseInputListener); 10jl2.addMouseMotionListener(mouseInputListener); // これを呼び出さなければダメ

以下、最初の回答

コードの情報が不足しているので単なる推測ですが・・・

以下のようになっているのではないでしょうか?

java

1class MyListener implements MouseListener, MouseMotionListener { 2 @Override public void mouseClicked(MouseEvent e) { ... } 3 @Override public void mouseEntered(MouseEvent e) { ... } 4 @Override public void mouseMoved(MouseEvent e) { ... } 5 ... 6} 7 8component.addMouseListener(new MyListener()); 9component.addMouseMotionListener(new MyListener()); //<==これをしていないのでは?

mouseClicked, mouseEnteredはMouseListenerインターフェースなのでaddMouseListenerとすればイベントをハンドリングできますが、mouseMovedはMouseMotionListenerインターフェースなのでaddMouseMotionListenerでリスナー登録をしないとイベントハンドリングできません。

投稿2017/07/11 15:06

編集2017/07/12 01:12
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akayon

2017/07/11 15:09

jl2.addMouseListener(new MouseInputAdapter(){ すみません、このコードを入れるのを忘れていました。
KSwordOfHaste

2017/07/12 00:56 編集

jl, jl2がどんなインスタンスなのか、どうイベント登録しているのかだけでも抜粋したコードを質問に明記したほうがよいかと思います。 --- あ!MouseInputAdapterですか・・・ すみません、そのクラス使ったことないのでコメントを把握し損ねてました。回答を書き直してみます。
akayon

2017/07/12 07:16

MouseMotionListnere にしてなかっただけでしたすみません。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問