我有一个组件,我在其上绘制所有表面上的BufferedImage
。 我想绘制更多的东西,当它通过该区域时,按下鼠标。 要做到这一点,我要在组件上添加一个MouseMotionListener
并实施mouseMove
方法。在mouseMoved方法内部,我在光标图像绘制结束时调用repaint()
。我想知道是否有更好的方法来做到这一点,导致光标后面的图像非常小,我每次都在重绘每一件东西。通过BufferedImage绘图。重绘()
1
A
回答
1
将包含Icon的JLabel添加到带有缓冲图像的面板。
然后,当您移动鼠标时,您只需更改标签的位置。 Swing将重新绘制最后一个位置,以便缓存的图像显示出来,然后它将重新绘制新位置处的标签。所以让Swing管理重绘。
1
既然你知道你的鼠标和小图片,你会画在你的背景的坐标,可以优化这样的[伪代码]:
void mouseMoved(event) {
lastCoordinates = currentCoordinates;
currentCoordinates = event.coordinates;
image.repaint(lastCoordinates.x, lastCoordinates.y, smallImage.width, smallImage.height);
image.repaint(currentCoordinates.x, currentCoordinates.y, smallImage.width, smallImage.height);
}
这样,你只有重新绘制两个地区你实际上关心的不是整个背景。
此外,阅读javadoc它似乎上面的代码我实际上触发2个独立的调用绘画的东西,这将是效率低下。你可能想尝试通过10毫秒左右的值,以确保2种颜料一起执行。
检查出重绘的javadoc(),它4个5个参数:由
- 4-argument版本
- 5-argument版本
相关问题
- 1. 使用bufferedimage重新绘制图像
- 2. Java Swing BufferedImage vs直接绘图
- 3. NSTableViewHeaderView不通过NSScroller绘图
- 4. Java Graphics2D绘制到BufferedImage中
- 5. 通过Cocos2d绘图直接OpenGL ES 2.0绘图
- 6. 绘图图表通过在数据帧
- 7. TabControl重绘通过顶部的窗口
- 8. 正确地通过validateNow()重绘UIComponent()
- 9. 重绘通过类创建的Rect
- 10. 二维绘图:按钮 - 重绘神秘
- 11. WPF图像重绘
- 12. Java重绘图像
- 13. 重绘图像WPF
- 14. iPhone通过图形绘制Core Graphics
- 15. 大熊猫多列组通过绘图
- 16. 通过位图绘制小部件
- 17. 通过位图绘制文本
- 18. 通过ggplot在R中绘图
- 19. 通过UIScrollView绘制图像和线条
- 20. 通过ggplot2进行DBSCAN集群绘图
- 21. 通过调用堆栈绘制图表
- 22. 通过R中的迭代绘图
- 23. Android:通过按钮绘制图像
- 24. 通过触摸iPhone绘制图像sdk
- 25. 通过画布绘制量表图
- 26. 在Android中通过ImageView绘制图层
- 27. 的paintComponent()我当调用的paintComponent通过重绘由代码内重绘
- 28. 如何使用bufferedimage绘制精灵
- 29. 在BufferedImage中绘制多条线
- 30. 如何绘制一个BufferedImage的扇区?
我改变所有的* “IM” 编辑您的帖子* *“我是”* ......你担心什么? * repaint()*效率不高,或者您在BufferedImage中执行的绘图效率不高? – SyntaxT3rr0r 2011-04-07 16:51:29
每次调用repaint来绘制所有组件效率都不高,我在光标旁边的绘图宽度为1px,并占用了组件的整个高度。我的组件上有一个bufferedimage,宽度为400px,所以我想要更好的方法来做到这一点。 JLabel可能是解决方案。 – wotan2009 2011-04-07 18:01:36