追記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:09
2017/07/12 00:56 編集
2017/07/12 07:16