Java Swing:在鼠标悬停时更改背景颜色

Mig*_*ing 4 java mouse swing background mouseout

我已经实现了一个简单的鼠标监听器,只要鼠标进入组件(JPanel),背景颜色就会改变,只要鼠标离开,它就会恢复.这有一些问题:

  • 有时鼠标移动得太快,以至于不会触发mouseExit事件
  • 如果我的组件有子节点,当鼠标移动到子节点时它会触发mouseExit
  • 如果我将鼠标快速移动到子节点,则不会触发mouseEnter事件

我猜这对于Swing老兵来说很简单.对于如何解决这个问题,有任何的建议吗?我不想使用计时器等......

cam*_*ckr 6

如果我将鼠标快速移动到子节点,则不会触发mouseEnter事件

我从来没有见过这种情况,但如果它是一个问题,那么你可以处理mouseMoved而不是重置背景.

如果我的组件有子节点,当鼠标移动到子节点时它会触发mouseExit

使用以下测试,只有在离开组件边界时才会执行代码:

public void mouseExited(MouseEvent e) 
{
    if (! getVisibleRect().contains(e.getPoint()) )
    {
        setBackground(...);
    }
}
Run Code Online (Sandbox Code Playgroud)