首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >repaint()无法工作

repaint()无法工作
EN

Stack Overflow用户
提问于 2012-04-04 17:17:03
回答 2查看 438关注 0票数 5

我想根据从另一个线程收到的数据在我的面板上绘制一个图像。我确信data和随后的像素数组可以很好地工作,但是repaint()永远不会工作。有人能告诉我这里出了什么问题吗?

代码语言:javascript
复制
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;

/** Create an image from a pixel array. **/
public class PicturePlaza extends JApplet
{
  ImagePanel fImagePanel;
  ReadCom   readComPort;
  Thread readPortThread;

  public void init () {
    // initiate the read port thread so that it can receive data
     readComPort = new ReadCom();
     readPortThread = new Thread(readComPort,"ReadCom");
     readPortThread.start();

     Container content_pane = getContentPane ();
     fImagePanel = new ImagePanel ();
     content_pane.add (fImagePanel);  

  } 

  // Tell the panel to create and display the image, if pixel data is ready.
  public void start () {
      while(true){
          if(readComPort.newPic){
              fImagePanel.go();
          }
          try {
                    Thread.sleep(4000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
      }
  }


/** Create an image from a pixel array. **/
  class ImagePanel extends JPanel{
      Image fImage;
      int fWidth = ReadCom.row, fHeight = ReadCom.col;      

      void go() {         
                    //update the image if newPic flag is set to true                
                    fImage = createImage (new MemoryImageSource (fWidth, fHeight, ReadCom.fpixel, 0, fWidth));
                    repaint();
                    readComPort.newPic = false; //disable the flag, indicating the image pixel has been used                                                            
      } 

      /** Paint the image on the panel. **/
      public void paintComponent (Graphics g) {
        super.paintComponent (g);       
        g.drawImage (fImage, 0, 0, this );  
      } 
  } 
}

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-10-08 09:14:59

repaint()上有个小小的注解。repaint()计划重新绘制屏幕,根据我的经验,它不会总是立即完成。我发现最好的解决方案是自己直接调用paint()

代码语言:javascript
复制
Graphics g;
g = getGraphics();
paint(g);

当我想要立即绘制时,我将其作为一个新函数在代码中调用。此外,这不会擦除屏幕上以前的图形,您必须手动执行此操作。

票数 1
EN

Stack Overflow用户

发布于 2012-06-20 20:37:47

在您的小程序(PicturePlaza)中尝试repaint();,然后尝试validate();

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

https://stackoverflow.com/questions/10008253

复制
相关文章

相似问题

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