1

JTextField に MouseMotionListener を 1 つ追加しました。しかし、jf.getMouseMotionListeners().length登録されているマウスリスナーの数を知るために使用すると、3!! になります。その長さに応じてリスナーを追加しようとしているため、問題が発生しています。ゼロの場合は追加します。それ以外の場合は、リスナーを追加したくありません。

以下はコードで、マウス移動イベントの長さを知るためのコードを書きました。

public static void main(String args[]) {
    JFrame fr = new JFrame();
    final JTextPane jf = new JTextPane ();
    jf.addMouseMotionListener(new MouseMotionListener() {

        @Override
        public void mouseMoved(MouseEvent arg0) {

                 System.out.println(jf.getMouseListeners().length);
        }

        @Override
        public void mouseDragged(MouseEvent arg0) {
        // TODO Auto-generated method stub

        }
    });
    jf.setBounds(30,30,100,50);
    fr.setSize(new Dimension(500, 500));
    fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    fr.setLayout(null);

    fr.add(jf);
    fr.setVisible(true);
}

リスナーを 1 つだけ追加したのに、長さが 3 なのはなぜですか?
コンポーネントのリスナーが登録されているかどうかを確認するより良い方法はありますか?

編集

これが私がやろうとしていることです。

JTextPane をウィンドウ内のどこにでもドラッグでき、 JTextPane をダブルクリックして編集できるはずです。

編集中にドラッグ リスナーがあり、スタイルを設定するテキストを選択したくない場合、JTextPane からテキストを選択する代わりに、JTextPane がドラッグされます。

ここで、編集モードのときにモーション リスナーを削除し、編集していないときに追加したいと考えています。

だから私はそれを削除しようとしているか、単純にモーションリスナーを無効にする必要があります。

4

2 に答える 2