【发布时间】:2011-12-13 14:50:31
【问题描述】:
我有一个JPanel 使用BorderLayout,它有两个组件。 NORTH 中的 JLabel,CENTER 中的 JList。
我在面板中添加了一个MouseListener,并暂时编写了一个消息框以显示在mouseEntered 上。
问题是只有当光标进入标签所占据的区域时才会触发该事件。当鼠标进入整个面板区域时,我需要触发事件。
知道我做错了什么吗?
编辑:创建面板的代码
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel("Label"), BorderLayout.NORTH);
p.add(new JList(), BorderLayout.CENTER);
p.addMouseListener(new MouseListener(){
@Override
public void mouseEntered(MouseEvent e) {
JOptionPane.showMessageDialog(null, "Entered Panel");
}
//Other overriden methods
...
});
【问题讨论】:
-
"如果我需要显示一些代码,请告诉我。"。是的,请附上sscce。
-
“创建面板的代码”您在理解 SSCCE 的哪个部分有困难?
-
谁要求完整的程序?你读过链接吗?
-
顺便说一句 - 请注意
JList将消耗鼠标事件。 -
我可能弄错了,但我确实相信具有最高 z-index 的组件首先接受 MouseEvents,如果它们什么都不做,它们(通常)会传递它们。因此,如果您的 JList 在您的 JPanel 中,它将具有更高的 z-index,并且由于 JList 处理事件,它不会被传递。
标签: java swing event-handling jpanel mouselistener