【发布时间】:2011-04-06 00:39:06
【问题描述】:
我有一个主窗口:
public class MainPanel extends JFrame implements MouseListener {
public MainPanel() {
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
addMouseListener(this);
ChildPanel child = new ChildPanel();
add(child);
JPanel spacer = new JPanel();
spacer.setPreferredSize(new Dimension(50, 50));
add(spacer);
pack();
setLocationRelativeTo(null);
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Mouse click event on MainPanel");
}
}
还有一个子 JPanel:
public class ChildPanel extends JPanel implements MouseListener {
public ChildPanel() {
setBackground(Color.RED);
setPreferredSize(new Dimension(200, 200));
//addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Mouse click event on ChildPanel");
}
}
在子面板中注释掉对addMouseListener 的调用后,当我单击窗口中的任意位置(包括子级)时,父级会收到单击事件。如果我取消注释该调用并点击子面板,只有子面板会收到点击事件,它不会传播到父面板。
如何阻止事件被孩子消费?
【问题讨论】:
-
这很奇怪......我记得有一个相反的问题,父母正在消耗孩子绑定的鼠标事件