本人JAVA菜鸟一个,课程设计要求做一个动画。本来想实现类似幻灯片的效果,可以一幅图片一幅图片的轮流显示,并不断循环。可无奈JAVA底子太薄,只写出了一个半成品的程序,希望有高手不吝赐教。不胜感激~
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;public class TestSimpleRunnable extends JApplet implements ActionListener
{
    private String str;
    private Thread myThread;
    Image bgImage1,bgImage2,bgImage3,bgImage4,bgImage5;
    public void init()
    {
      bgImage1 = this.getImage(this.getCodeBase(),".//image//bg1.jpg");
      bgImage2 = this.getImage(this.getCodeBase(),".//image//bg2.jpg");
      bgImage3 = this.getImage(this.getCodeBase(),".//image//bg3.jpg");
      bgImage4 = this.getImage(this.getCodeBase(),".//image//bg4.jpg");
      bgImage5 = this.getImage(this.getCodeBase(),".//image//bg5.jpg");
      bgImage6 = this.getImage(this.getCodeBase(),".//image//bg6.jpg");
      buildUI(this.getContentPane(),bgImage1,bgImage2,bgImage3,bgImage4,bgImage5);
    }
    //build UI
    void buildUI(Container container,Image baImage1,Image baImage2,Image baImage3,Image baImage4,Image baImage5)
    {
       int fps = 1;
       animatorPane = new AnimatorPane(bgImage1,bgImage2,bgImage3,bgImage4,bgImage5);
       container.add(animatorPane,BorderLayout.CENTER);
    }
    //main method
    public static void main(String [] args)
    {
       Image bgImage1 = Toolkit.getDefaultToolkit().getImage(".//image//bg1.jpg");
       Image bgImage2 = Toolkit.getDefaultToolkit().getImage(".//image//bg2.jpg");
       Image bgImage3 = Toolkit.getDefaultToolkit().getImage(".//image//bg3.jpg");
       Image bgImage4 = Toolkit.getDefaultToolkit().getImage(".//image//bg4.jpg");
       Image bgImage5 = Toolkit.getDefaultToolkit().getImage(".//image//bg5.jpg");
       JFrame jframe = new JFrame("杨斌");
       BorderLayout f1=new BorderLayout();
f1.setHgap(10);
jframe.setLayout(f1);
JButton jbutton=new JButton("个人信息");
jframe.add (jbutton,f1.NORTH);
jbutton.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e)
           {
              Frame a=new Frame(); 
           final Dialog b=new Dialog(a); 
           b.setTitle("我的信息");
           b.add(new Label("姓名:杨斌  学号:20080254"));
                b.setSize(220,80);
                    b.setLocation(120,250); 
           b.setVisible(true);  
           b.addWindowListener(new WindowAdapter() 
               { 
                  public void windowClosing(WindowEvent e) 
                     {                         b.dispose();     
                     } 
                }); 
             }
         });
     public TestSimpleRunnable(String str)
     {
       this.str=str;
     }
     public void myStart()
     {
       myThread = new Thread(this.str);
       myThread.start();
     }
     public void run()
     {  
        for (int i = 0;i;i++)
        {
                System.out.println(i + " " +myThread.getImage());
          
                try
                {
                   myThread.sleep((long)(Math.random() * 1000));
                }catch(InterruptedException e){}
        }
     }
     public static void main(String[] args)
     {
        new TestSimpleRunnable("bgImage1").myStart();
        new TestSimpleRunnable("bgImage2").myStart();
        new TestSimpleRunnable("bgImage3").myStart();
        new TestSimpleRunnable("bgImage4").myStart();
        new TestSimpleRunnable("bgImage5").myStart();
     }
}         
 

解决方案 »

  1.   

    随便写了个
    你自己再完美一下吧,增加健壮性之类的
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Timer;
    import java.util.TimerTask;import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;public class Test4Timer extends JFrame { /**
     * 
     */
    private static final long serialVersionUID = 1L; /**
     * @param args
     */
    public static void main(String[] args) {
    Test4Timer tt =new Test4Timer();
    tt.start();
    tt.setVisible(true);
    tt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    } private final JLabel l = new JLabel();
    private List<ImageIcon> images = new ArrayList<ImageIcon>();

    public Test4Timer() {
    setSize(500, 400);
    getContentPane().add(l);
    images.add(new ImageIcon("E:\\DESK\\IMG_1591.jpg"));
    images.add(new ImageIcon("E:\\DESK\\IMG_17071.jpg"));
    } public void start() {
    Timer t = new Timer("My timer", true);
    t.schedule(new TimerTask() { @Override
    public void run() {
    int i = (int) (images.size() * Math.random());
    System.out.println("" + i);
    ImageIcon ii = images.get(i);
    l.setIcon(ii);
    }
    }, 1000, 1000);
    }
    }
      

  2.   


    import java.awt.*;import javax.swing.*;import java.awt.event.*;public class TestImage   implements ActionListener{    JPanel jp1 = new JPanel();    CardLayout cl = new CardLayout();    Timer t = new Timer(1000,this); public void actionPerformed(ActionEvent ae) { String comm = ae.getActionCommand(); if("next".equals(comm)){ cl.next(jp1); }else if("previous".equals(comm)){ cl.previous(jp1); }else if("first".equals(comm)){ cl.first(jp1); }else if("last".equals(comm)){ cl.last(jp1); }else if("play".equals(comm)){ t.start(); }else if("stop".equals(comm)){ t.stop(); }else { cl.next(jp1); } } public TestImage(){ JFrame jf = new JFrame("TestFlow");     String[] image = {"c:\\1.jpg",       "c:\\2.jpg","c:\\3.jpg","c:\\4.jpg"}; JLabel[] jl = new JLabel[image.length]; jp1.setLayout(cl); for(int i=0;i<jl.length;i++){ Icon ic = new ImageIcon(image[i]); jl[i] = new JLabel(ic); jp1.add(jl[i],i+""); } JPanel jp2 = new JPanel(); String[] butt = {"first","next","previous","last","play","stop"}; for(int i=0;i<butt.length;i++){ JButton jb = new JButton(butt[i]); jp2.add(jb); jb.addActionListener(this); } jf.add(jp1); jf.add(jp2,BorderLayout.SOUTH); jf.pack();     jf.setLocation(200,100); jf.setVisible(true); jf.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestImage(); } }
      

  3.   

    以前用swing写的。基本的自动播放功能实现
      

  4.   

    谢谢了,lhj_l 的程序我修改了一下图片路径,已经可以播放动画了。
    truediego的程序我改了图片路径之后,还是只会显示一个空白窗体,图片没办法显示,可能是我的路径设得不正确了。
    先回复一下,感谢各位帮忙,我先接着看程序了,希望能弄好。
      

  5.   

    又仔细看了一下,truediego的程序也是可以用的,刚才有一个符号弄错了,汗。再次感谢哈