我有一个JPanel(我们称它为ctrlPanel),并使用null布局将JLabel放置在它的背景中。在此标签的顶部,我还有另一个JLabel和一个JButton(默认情况下是隐藏的)。当用户将鼠标悬停在ctrlPanel上时,我想显示该标签和按钮。

通过将mouseAdapter添加到ctrlPanel,并在mouseEntered时调用showControls(),在mouseExited时调用hideControls(),它几乎可以正常工作。这些使用setVisible在顶部显示/隐藏组件。

但是,当用户将鼠标悬停在JButton上时,ctrlPanel似乎会收到mouseExited调用,这会使JButton变得“闪烁”(mouseExited-> mouseEntered-> mouseExited等)。这对我来说没有意义,因为JButton在ctrlPanel中。我的意思是,将鼠标悬停在JLabel上没有问题。

最佳答案

我认为您想要的不是可行的-内部控件会拦截鼠标事件。所以你可以


创建鼠标侦听器并将其附加到面板,按钮等,并在任何地方正确处理内容
检查mouseExited()的坐标,如果鼠标仍在面板内,则忽略该事件

10-08 02:32