9

私の目標は、このコードを簡素化することでした (すべて正常に動作します)。

package test;

import java.awt.Window;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JWindow;

public class A extends JWindow implements MouseListener, MouseMotionListener {

    public A() {
        addMouseListener(A.this);
        addMouseMotionListener(A.this);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
    }

    @Override
    public void mousePressed(MouseEvent e) {
        //This method is being used, working fine
    }

    @Override
    public void mouseReleased(MouseEvent e) {
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        //This method is being used, working fine
    }

    @Override
    public void mouseMoved(MouseEvent e) {
    }
}

しかし、次MouseAdapterのように使用することにした場合:

addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
        transferFocusBackward();
        //This method is being used, working fine
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        //This method is being used, not working anymore
    }
});

mouseDraggedイベントを受信しません。しかし、次のように追加するMouseMotionListenerと:

addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
        //This method is being used, working fine
    }
});

addMouseMotionListener(new MouseMotionAdapter() {
    @Override
    public void mouseDragged(MouseEvent e) {
        //This method is being used, working fine
    }
});

その後、すべてが正常に戻ります。だから私の質問は - mouseDraggedmouseMovedおよびクラスのmouseWheelMovedメソッドがMouseAdapter機能しない場合の目的は何ですか?

4

1 に答える 1

10

わかりました。MouseAdapterクラスのドキュメントでは、「拡張クラスを使用してリスナー オブジェクトを作成し、コンポーネントのaddMouseListeneraddMouseMotionListeneraddMouseWheelListenerメソッドを使用してコンポーネントに登録する」と言われています。したがって、次のようになります。

private class MouseListeners extends MouseAdapter {

    @Override
    public void mousePressed(MouseEvent e) {
        //This method is being used, working fine
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        //This method is being used, working fine
    }
}

その後:

MouseListeners listeners = new MouseListeners();   
addMouseListener(listeners);
addMouseMotionListener(listeners);

今、すべてがOKです。

于 2013-08-15T19:04:49.737 に答える