首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java图形到图像

Java图形到图像
EN

Stack Overflow用户
提问于 2009-09-11 11:24:47
回答 3查看 4K关注 0票数 1

嗯,我是一个初级的java程序员,在过去的一周里,我一直面临着以下问题:我有一个图像和一个面板。图像和面板都在ScrollPane中,它们都需要同时移动。当我试图移动他们在一起,我得到一个闪烁的效果。不过,每个人都能单独移动,效果很好。我读过关于双缓冲的文章,并决定实现它。我的问题是,我的图像非常非常大,因此每次从零开始画它会使我的应用程序陷入困境。因此,我一直在考虑以下解决方案:

在我的画图函数中,我将推进大图像的滚动条(工作很好),从我现在更新的图形内容中画出一个新的图像,并在此基础上绘制我面板的内容。

虽然我在网上找了很多,但我还是找不到如何做的解释。因此,让它简短,我如何使用我当前的图形对象来从中画一个图像?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-12 20:17:50

我认为您在代码中的某个地方从made方法中进行了重写。

您必须加倍缓冲帧:

代码语言:javascript
运行
复制
frame.setVisible(true);
frame.createBufferStrategy(2); // Two is the number of buffers
// Here is the order important: first set visible, then createStrategy

然后你的画框中的画法:(不要覆盖一个方法)

代码语言:javascript
运行
复制
public void updateGraphics()
{
     BufferStrategy bs = getBufferStrategy();
     Graphics g = bs.getDrawGraphics();
     paint(g);
     g.dispose();
     bs.show();
     Toolkit.getDefaultToolkit().sync();
     update(g);
}

可以在线程中使用此方法:

代码语言:javascript
运行
复制
new Thread("PainterThread")
{
     public void run()
     {
          while (true)
          {
               try
               {
                    updateGraphics();
                    Thread.sleep(10);
               } catch (Exception e) {}
          }
     }
}.start();
票数 0
EN

Stack Overflow用户

发布于 2009-09-11 11:34:39

据我所知,您不必手动实现双重缓冲。据我所知,这里有一个属性(例如,setDoubleBuffered(true))来激活双缓冲。

带着最好的问候

票数 0
EN

Stack Overflow用户

发布于 2009-09-11 11:53:15

您可以制作一个面板来扩展一些JComponent (如JPanel)并覆盖它的panel方法。就像这样:

代码语言:javascript
运行
复制
class MyPanel extends JPanel {


  @override
  public void paint(Graphics g) {
    g.drawImage(myImage, 0, 0, null);
  }

  ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1410347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档