小编Kat*_*ann的帖子

子组件中的MouseMotionListener禁用父组件中的MouseListener

我需要帮助来理解Swing中的事件传播.我知道每个事件只由一个组件处理.因此,当我有一个outside带有一些子面板的面板inside并且我将mouseListeners添加到它们时,inside将会调用其中一个.这很好,这是预期的行为.

但我不理解以下情况中的行为: inside注册MouseMotionListener并outside注册MouseListener.我希望inside使用所有MouseMotionEvents并outside接收MouseEvents,因为没有正常MouseEvents的监听器inside.但事实并非如此,inside不仅仅消耗MouseMotionEvents的所有MouseEvent.

以下代码说明了该问题:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class EventTest {
public static void main(String... args) {
    SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run() {
            JComponent inside = new JPanel(); 
            inside.setBackground(Color.red);
            inside.setPreferredSize(new Dimension(200,200));
            MouseMotionListener mm = new MouseMotionListener() {
                @Override
                public void mouseDragged(MouseEvent arg0) {
                    System.err.println("dragged");                      
                }
                @Override
                public void mouseMoved(MouseEvent arg0) {
                    System.err.println("moved");
                }
            };
            // next line disables handling …
Run Code Online (Sandbox Code Playgroud)

java events swing mouse-listeners

9
推荐指数
1
解决办法
5363
查看次数

标签 统计

events ×1

java ×1

mouse-listeners ×1

swing ×1