Tag: doublebuffered

Java:如何在Swing中实现双缓冲?

编辑两个 为了防止snarky注释和单行答案错过了这一点: IFF就像调用setDoubleBuffered(true)一样简单,那么如何访问当前的离线缓冲区,以便我可以开始搞乱BufferedImage的底层像素databuffer? 我花时间写了一段代码(看起来还挺有趣的),所以我真的很感激答案,实际回答(这是多么令人震惊),我的问题和解释什么/这是如何工作,而不是单线和snarky注释 ;) 这里有一段代码在JFrame上反弹一个正方形。 我想知道可以用来转换这段代码的各种方式,以便它使用双缓冲。 请注意,我清除屏幕并重新绘制正方形的方式并不是最有效的方法,但实际上并不是这个问题的关键所在(从某种意义上说,这个例子有点慢)。 基本上,我需要不断地修改BufferedImage中的很多像素(因为有某种animation),而且我不想看到由于在屏幕上单缓冲而造成的视觉伪影。 我有一个JLabel,它的Icon是一个包装了BufferedImage的ImageIcon。 我想修改那个BufferedImage。 必须做些什么才能变成双缓冲? 我明白,不知何故“图像1”将显示,而我将在“图像2”上绘制。 但是一旦我完成了“图像2”的绘制,我该如何“快速”将“图像1”replace为“图像2” ? 这是我应该手动做的,就像通过自己交换JLabel的ImageIcon一样? 我应该总是在同一个BufferedImage中绘图,然后在JLabel的ImageIcon的BufferedImage中做一个BufferedImage像素的快速“blit”? (我猜不是,我不知道怎样才能使它与显示器的“垂直空白线”同步[或者与平板显示器相当:我的意思是,在不干扰显示器本身刷新的情况下“同步”像素,以防止剪切])。 那么“重绘”命令呢? 我想自己触发这些吗? 哪个/什么时候我应该打电话repaint()或别的什么? 最重要的要求是我应该直接在图像的像素databuffer中修改像素。 import javax.swing.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.awt.image.DataBufferInt; public class DemosDoubleBuffering extends JFrame { private static final int WIDTH = 600; private static final int HEIGHT = 400; int xs = […]

如何在表单上双缓冲.NET控件?

我怎样才能设置DoubleBuffered闪烁的窗体上的控件的受保护的DoubleBuffered属性?