首页 文章

fillRect或drawImage在java中的update方法中没有激活

提问于
浏览
0

嗨,我一直试图摆脱我在JFrame应用程序上的闪烁 . 已经搜索过并看到setDoubleBuffered(true)可以用于Jpanel的paintComponent,但不能用于JFrame的paint方法,也不能用于applet .

通过在paint方法中引入指令this.createbufferstrategy(2)来管理减少但不消除闪烁,并且使用指令this.setignorerepaint(true)在paint中进一步减少闪烁 .

但我终于找到了一个完全消除闪烁的代码示例,它通过在更新函数中绘制静态元素来工作 .

在applet中的更新中测试fillRect并且它可以工作,但是当复制粘贴到常规Java应用程序中时,它在jframe的更新函数中不起作用 .

这是代码

Graphics graphics;
   Image image;
   public void update(Graphics g)
   {
   if (image == null) {  

   image = createImage(this.getWidth(), this.getHeight());

   graphics = image.getGraphics();  }

   graphics.setColor(Color.blue);

   graphics.fillRect(0,  0,  this.getWidth(),  this.getHeight());

   g.drawImage(image, 0, 0, this);//}

使用空的绘画功能,这将绘制到屏幕并在小程序中用蓝色填充它,它也消除了闪烁 . 但是在jframe的正常应用中它什么都不做 .

需要做些什么来允许fillRect或drawImage在非applet常规应用程序环境中的更新内工作?

顺便说一句,如果图形对象通过调用fillRect进行自我修改,我对此有点新鲜,如何修改图像对象?因为drawImage是屏幕变蓝所必需的 .

PS我试过不使用createbufferedstrategy和setignorerepaint,没有任何改变 .

1 回答

  • 1

    当使用 setIgnorePaint(true) 时,它不允许你搞乱图形 . 我绘制的图形g(在绘制方法中,你调用update(g))

    如果忽略paint,它将不允许你使用paintComponent的Graphic参数 . 发布包含图形的所有代码(您制定策略的位置,您调用此方法的位置,等等 . )

    闪烁是这个策略的一个非常主流的问题,我不能保证我能够解决它(我的朋友不久之前把问题提到了我身上,但我并不在乎试图弄清楚它),但这应该至少解释为什么你的图形不渲染

相关问题