【问题标题】:Adding MouseMotionListeners添加 MouseMotionListener
【发布时间】:2013-06-19 16:56:43
【问题描述】:

我目前有一个扩展 JComponent 的抽象类。在这个类中,我定义了一个方法如下:

public void makeMouseOverListener(){
System.out.println("Inside make mouseover...");
MouseMotionListener ret = new MouseMotionListener(){
    public void mouseDragged(MouseEvent e) {

    }
    public void mouseMoved(MouseEvent e) {
        System.out.println("Mouse Moved");
    }
};
this.addMouseMotionListener(ret);
}

我用一些其他对象扩展了这个抽象类,并在每个对象的构造函数中调用了这个方法。我总是看到第一个 println,但“鼠标已移动”行从未出现在我的控制台中。我还尝试在每个构造函数中直接创建此 MouseMotionListener,但结果相同。所以最终我的问题是,我怎样才能确保我的对象中有一个工作动作监听器?提前谢谢!

【问题讨论】:

    标签: java awt actionlistener mousemove mouse-listeners


    【解决方案1】:

    new MouseMotionListener(code)里面的代码看起来像这样.. **

    MouseMotionListener ret = new MouseMotionListener(
        public void mouseDragged(MouseEvent e) {
        }
        public void mouseMoved(MouseEvent e) {
            System.out.println("Mouse Moved");
        }
    });
    

    **

    【讨论】:

      【解决方案2】:

      如果您在自定义组件的构造函数中调用makeMouseOverListener,那么鼠标位置很可能永远不会定位在组件本身之上。确保组件的尺寸大于0 x 0。这可以通过使用布局管理器来实现。例如将组件定位在BorderLayout.CENTER 位置。

      【讨论】:

      • 这也是我最初的想法。但是,我使用类似于 this.setSize(new Dimension(2* radius, 2 * radius));// 设置大小的代码,以便听者有一些区域可以听。 this.setLocation(new Point(x-radius, y-radius));在每个构造函数中,所以组件应该是我想要的大小和位置...
      • 听起来你正在使用null 布局,这可能是问题所在。请改用布局管理器。考虑发布SSCCE 以全面了解为什么这不起作用
      • 我不认为布局管理器在这种情况下真的可行。我需要绝对定位我的所有组件,因为在收到用户输入之前我不知道它们会在哪里。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 2015-10-19
      • 2016-07-03
      相关资源
      最近更新 更多