在Java onPaint()上调用Repaint()

时间:2013-03-16 15:27:17

标签: 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(BUTTON_STATE.IDLE);
    }
    System.getInstance().repaint();
}

当鼠标移动时,总会调用重绘方法。

问题是>这是悬停行动的一个很好的实现吗?还是有更好的实施?因为我认为每次我的鼠标移动时调用repaint()都是非常沉重的。

THX b4

1 个答案:

答案 0 :(得分:0)

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

如果您怀疑repaint()可能过于频繁地调用,请使用接受最大时间的版本,之后应该重新绘制对象。例如,如果您在同一秒内拨打button.repaint(1000) 100次,则只会重新绘制一次。您也可以指定应该重新绘制的区域(而不是整个屏幕),但这只适用于您的实现通过这种部分重绘实际上减少了工作量。

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