嗯,我是一个初级的java程序员,在过去的一周里,我一直面临着以下问题:我有一个图像和一个面板。图像和面板都在ScrollPane中,它们都需要同时移动。当我试图移动他们在一起,我得到一个闪烁的效果。不过,每个人都能单独移动,效果很好。我读过关于双缓冲的文章,并决定实现它。我的问题是,我的图像非常非常大,因此每次从零开始画它会使我的应用程序陷入困境。因此,我一直在考虑以下解决方案:
在我的画图函数中,我将推进大图像的滚动条(工作很好),从我现在更新的图形内容中画出一个新的图像,并在此基础上绘制我面板的内容。
虽然我在网上找了很多,但我还是找不到如何做的解释。因此,让它简短,我如何使用我当前的图形对象来从中画一个图像?
发布于 2009-09-12 20:17:50
我认为您在代码中的某个地方从made方法中进行了重写。
您必须加倍缓冲帧:
frame.setVisible(true);
frame.createBufferStrategy(2); // Two is the number of buffers
// Here is the order important: first set visible, then createStrategy然后你的画框中的画法:(不要覆盖一个方法)
public void updateGraphics()
{
BufferStrategy bs = getBufferStrategy();
Graphics g = bs.getDrawGraphics();
paint(g);
g.dispose();
bs.show();
Toolkit.getDefaultToolkit().sync();
update(g);
}可以在线程中使用此方法:
new Thread("PainterThread")
{
public void run()
{
while (true)
{
try
{
updateGraphics();
Thread.sleep(10);
} catch (Exception e) {}
}
}
}.start();发布于 2009-09-11 11:34:39
据我所知,您不必手动实现双重缓冲。据我所知,这里有一个属性(例如,setDoubleBuffered(true))来激活双缓冲。
带着最好的问候
发布于 2009-09-11 11:53:15
您可以制作一个面板来扩展一些JComponent (如JPanel)并覆盖它的panel方法。就像这样:
class MyPanel extends JPanel {
@override
public void paint(Graphics g) {
g.drawImage(myImage, 0, 0, null);
}
...
}https://stackoverflow.com/questions/1410347
复制相似问题