我在JTextField中添加了一个MouseMotionListener。但是,当我使用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);
}
为什么只添加一个侦听器时长度为3?
有没有更好的方法来检查组件上的侦听器是否已注册?
编辑
这就是我想要做的。
我应该能够将JTextPane拖动到窗口内的任何位置,并且应该可以通过双击JTextPane对其进行编辑。
如果在编辑时有拖动侦听器,并且如果不想选择要设置样式的文本,则将拖动JTextPane而不是从JTextPane中选择文本。
现在,我想在处于编辑模式时删除运动监听器,而在不进行编辑时将其添加。
因此,这就是为什么我要删除它,或者简单地说,我需要禁用运动监听器。
最佳答案
输出正确,JTextField具有另一个实现通知器的API,通过添加的MouseListener通知它们
看看调试器返回什么
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class MouseAndJTextField {
private JFrame fr = new JFrame();
private JTextField jf = new JTextField(20);
public MouseAndJTextField() {
jf.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseClicked(MouseEvent arg0) {
System.out.println(jf.getMouseListeners().length);
}
});
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.add(jf);
fr.pack();
fr.setVisible(true);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MouseAndJTextField fs = new MouseAndJTextField();
}
});
}
}