java - 在 Swing 中重新绘制时识别 Graphics2D 的脏区

标签 java swing awt graphics2d

当使用 Graphics2D 对象时,找出目标缓冲区的哪一部分需要重绘的正确方法是什么,或者,如果需要重绘整个缓冲区,那么什么维度是目标缓冲区是什么?

目标缓冲区可以是 BufferedImageAWT 组件或打印时使用的虚拟设备。对于某些操作,例如用图案平铺背景,即使没有优化重绘的意图,也有必要知道需要绘制哪个区域。

我尝试使用 Graphics.getClipBounds(),但有时会返回 null

我假设有一些方法类似于 Rectangle2D getInvaidRegion()Rectangle2D getDestinationBufferSize()

最佳答案

在 Swing 中,有几种不同的方法可以要求您重绘。

最简单的做法是重写 paintComponent 并绘制所有内容,边框和子组件会为您处理。

下一个最复杂的是覆盖paint。您现在需要处理边框和子组件。

最后,您有了可以覆盖的 paintImmediately:

http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#paintImmediately%28int,%20int,%20int,%20int%29

这是关于脏区的通知,但对您的作用很小。

关于java - 在 Swing 中重新绘制时识别 Graphics2D 的脏区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20972892/

相关文章:

java - 为什么 WebElement 对于每个循环使用相同的 Selenium?

java - 端口未列出

java - 我看不到按钮 - (遵循教程)

用于加载未运行的 GUI 的 Java 主类

JPanel 的 Java awt 边框不起作用

java - split 函数在分割字符串后增加新的空格字符

java - 在两个线程上同步 ArrayList

java - 从密码字段 "enter"keypressed 触发 jLabel 鼠标事件(自定义按钮)

java - 在 Applet 中使用 AWTEventListener 时访问被拒绝

java - 为什么只有拉丁字符的 Java 字体声称支持亚洲字符,即使它不支持?