在Java onPaint()上调用Repaint()

在Java onPaint()上调用Repaint(),java,graphics,rendering,mouseover,graphics2d,Java,Graphics,Rendering,Mouseover,Graphics2d,我目前正在用Java实现一个鼠标悬停脚本,用于具有完整图形的按钮(没有JButton)。以下是我的代码: @Override public void mouseMoved(MouseEvent e){ if (btnExit.getBound().contains(e.getX(), e.getY())){ btnExit.setStatus(BUTTON_STATE.HOVER); } else { btnExit.setStatus(BUTTO

我目前正在用Java实现一个鼠标悬停脚本,用于具有完整图形的按钮(没有JButton)。以下是我的代码:

@Override
public void mouseMoved(MouseEvent e){
    if (btnExit.getBound().contains(e.getX(), e.getY())){
        btnExit.setStatus(BUTTON_STATE.HOVER);
    } else {
        btnExit.setStatus(BUTTON_STATE.IDLE);
    }
    System.getInstance().repaint();
}
当我的鼠标移动时,总是调用repaint方法

问题是>它是否是悬停操作的良好实现?还是有更好的实现?因为我认为每次鼠标移动时调用repaint()计算量很大

调用THX b4并不意味着组件将立即重新喷漆。此调用只是将一个条目放入重绘请求队列,在许多情况下,该队列可能与其他条目合并

如果您怀疑
repaint()
可能被调用得太频繁,请使用在对象重新绘制之后接受最长时间的版本。例如,如果您在同一秒内调用
按钮.repait(1000)
100次,则只会重新绘制一次。您还可以指定应该重新绘制的区域(而不是整个屏幕),但这只有在您的实现对这种部分重新绘制的工作量确实较少的情况下才能很好地工作


此外,您可以在
btnExit
上调用repaint,而不是在整个应用程序框架上调用repaint。

为什么要在鼠标上方调用repaint?有什么特殊用途吗?如果我不叫它,这个按钮就不会把图像变成悬停图像。它将停留在idleImage上…它是image on按钮吗?不,只是一个加载了ImageIO并通过绘制(图形g)方法绘制的图像。为什么存储当前状态并在状态实际更改时只调用
repaint()