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 がドラッグされます。
ここで、編集モードのときにモーション リスナーを削除し、編集していないときに追加したいと考えています。
だから私はそれを削除しようとしているか、単純にモーションリスナーを無効にする必要があります。