我从一个侦听器调用了一堆重绘,但是我设计我的画图函数的方式只需要一个重绘。我生成了一堆重绘,因为它挂到了我的鼠标运动监听器中。
有没有办法取消某个组件的所有挂起的重绘?我不能忽略重绘,因为有些是有效的,比如当你调整框架大小或从最小化恢复它时。
我为什么要关心呢?因为我的绘制代码很重,而且我不能在非常高的FPS下进行完整的重绘。
发布于 2009-08-10 19:09:28
Swing将为您组合重绘:参见Sun网站上的"Painting in AWT and Swing"。如果您计划快速连续地进行多次重绘,它们将合并到一个对paintImmediately()的调用中。
发布于 2009-08-10 19:08:51
频繁的重绘请求会自动合并为一个请求。优化这一点的最好方法不是重新绘制整个对象,而是使用特定区域的坐标调用repaint。这意味着你只需要重新绘制实际改变的区域。
发布于 2009-08-10 19:08:43
我的理解是,repaint()只是通过将组件的一个区域添加到重绘队列来调度重绘。如果已经在组件上请求了重绘,则新的重绘区域将仅与先前请求的区域联合。在处理完事件队列中的所有其他事件之前,实际上不会执行重绘。所以,你额外的重绘可能不会有太大的不同,即你的绘画代码只会被执行一次。参见JComponent.repaint和RepaintManager.addDirtyregion。
https://stackoverflow.com/questions/1256601
复制相似问题