jpanel不绘制缓冲图像,但缓冲图像可以创建为文件

发布于 2024-10-15 14:52:24 字数 873 浏览 0 评论 0原文

嗨,我有一个 jpanel 可以用来画画。从这个 jpanel 中,我制作了缓冲图像并将它们安全地放入链接列表中。按下按钮后,我想为该缓冲图像设置动画(一张接一张地播放) 问题是 jpanel 不显示缓冲图像,但是当我使用 ImageIO.write 来保护磁盘上的缓冲图像时,我得到了我想要制作动画的所有图片。请帮助我。

这是我的代码:

public void run(){
 for(int i=0;i`<`cm.animationListe.size();i++){
      b= cm.animationListe.get(i);

      try {
            ImageIO.write( b, "png", new File( "c:/java/circle"+i+".png" ) );

        } catch (IOException e1) {
            e1.printStackTrace();
        }
     try {
            Thread.sleep(1000);
             repaint();

        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }}
 animation = false;
}

public void paintComponent(Graphics g){
  super.paintComponent(g);
  if(animation){
          g.drawImage(b,0, 0,null);
      } 
}

Hi i have a jpanel to draw on. from this jpanel i make bufferedimages and safe them into a linkedlist. on a button press i want to animate this bufferedimages(play one after one)
the problem is that the jpanel dont show the buffered images but when i use ImageIO.write to safe the bufferedimages on disk i get all the pictures i want to animate. pls help me.

here is my code:

public void run(){
 for(int i=0;i`<`cm.animationListe.size();i++){
      b= cm.animationListe.get(i);

      try {
            ImageIO.write( b, "png", new File( "c:/java/circle"+i+".png" ) );

        } catch (IOException e1) {
            e1.printStackTrace();
        }
     try {
            Thread.sleep(1000);
             repaint();

        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }}
 animation = false;
}

public void paintComponent(Graphics g){
  super.paintComponent(g);
  if(animation){
          g.drawImage(b,0, 0,null);
      } 
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

城歌 2024-10-22 14:52:24

Thread.sleep() 会导致 GUI 冻结,因此无法重新绘制自身。

要制作动画,您需要使用 Swing 计时器

The Thread.sleep() causes the GUI to freeze so it can't repaint itself.

To do animation you need to use a Swing Timer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文