gpt4 book ai didi

java - component.get MouseMotionListener 返回多个

转载 作者:行者123 更新时间:2023-11-29 07:07:43 25 4
gpt4 key购买 nike

我向 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 中选择一个文本。

现在我想在我处于编辑模式时删除 motionlistener,并在我不编辑时添加它。

这就是我尝试删除它的原因,或者简单地说,我需要禁用 motionlistener。

最佳答案

  • 输出正确,JTextField 有另一个通知器实现的 API,它们从添加的 MouseListener 得到通知

  • 查看调试器返回的内容

enter image description here

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();
}
});
}
}

关于java - component.get MouseMotionListener 返回多个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17942964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com