Adiland 2017-05-22 02:42 采纳率: 0%
浏览 2355

JAVA中在JPanel里调用Graphics实现循环产生动画的问题。

想要实现用JAVA绘制简单的动画效果,大致就是先建一个JFrame对象,在里面添加一个JPanel,然后在JPanel里面用Graphics来进行画图,重复进行绘制一个与背景相同颜色的一张图像,在绘制一张其他的图像,经过一段时间之后重复进行。效果就是在一个背景中图像像右方移动。
在Graphics里面添加for语句在JFrame里面可以实现的。但是放到了JPanel里面就不行了,只会显示循环结束之后的图像,希望能够知道这个是什么原因造成的,能够用什么方法解决,望高手指教。
代码如下:
package Jpg_2;

import javax.swing.*;
import java.awt.*;

public class jpg_2
{
public static void main(String[] args)
{
frame f=new frame();
}
}
class frame extends JFrame
{
CJPanel c;

frame()
{
    super("图片");
    setSize(500,500);
    c=new CJPanel();
    this.add(c);
    c.repaint();
    setVisible(true);
}
class CJPanel extends JPanel
{
    ImageIcon icon=new ImageIcon("f:/3.png");
    ImageIcon icon2=new ImageIcon("f:/4.png");
    Image image=icon.getImage();
    Image image2=icon2.getImage();

    public void paint(Graphics g)
    {
        g.drawImage(image,20,20,this);
        g.setColor(Color.red);
        g.fillRect(0,0,500,500);
        for (int i=20;i<180;i++)
        {
            g.drawImage(image2,i,20,this);
            g.drawImage(image,i+1,20,this);
            try
            {
                Thread.sleep(10);
            }
            catch(InterruptedException e){}
        }
    }
}

}

  • 写回答

2条回答 默认 最新

  • noWayBinding 2017-05-22 09:25
    关注

    你这思路有点不对,代码也很乱.做动画你不能在paint里这么玩.paint里自作绘图动作,绘制的条件另起一个线程去更新,大概给你改了自己看看思路

     import javax.swing.*;
    import java.awt.*;
    
    import static javax.swing.JFrame.EXIT_ON_CLOSE;
    
    /**
     * Created by gxf on 17-5-22.
     */
    public class jpg_2 {
        public static void main(String[] args) {
            frame f = new frame();
            f.setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
    }
    
    class frame extends JFrame {
        CJPanel c;
    
        frame() {
            super("图片");
            setSize(500, 500);
            c = new CJPanel();
            this.add(c);
            c.repaint();
            setVisible(true);
            c.launchJPanel();
        }
    
        class CJPanel extends JPanel {
            ImageIcon icon = new ImageIcon("/home/gxf/图片/2.png");
            ImageIcon icon2 = new ImageIcon("/home/gxf/图片/1.png");
            Image image = icon.getImage();
            Image image2 = icon2.getImage();
            int x = 20, y = 20;
    
            public void launchJPanel() {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        while (true) {
                            repaint();
                            try {
                                Thread.sleep(10);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }).start();
            }
            public void paint(Graphics g) {
                g.setColor(Color.red);
                g.fillRect(0, 0, 500, 500);
                g.drawImage(image2, x, y, this);
                g.drawImage(image, x + 1, y, this);
                moveImage();
            }
    
            public void moveImage() {
                if (x < 180)
                    x++;
                else
                    x = 20;
            }
        }
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试