//JavaTest.java
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class JavaTest extends JFrame {
 static JSlider slider;
 static JButton jb1,jb2;
 WPanel sPanel;
 static double time=1000;//单位毫秒
 public JavaTest(String s){
  super(s);
  Container contentPane=getContentPane();
  //north
  JPanel panel=new JPanel(new GridLayout(1,2));
  slider=new JSlider(JSlider.HORIZONTAL,0,5000,2000);  //控制浏览图片间隔时间
  slider.setBorder(BorderFactory.createTitledBorder("滑动最大时间为5秒"));
  slider.addChangeListener(new ChangeListener(){
      public void stateChanged(ChangeEvent e){
       time=slider.getValue();
       slider.setBorder(BorderFactory.createTitledBorder("间隔时间为"+time/1000+"秒"));
      }
  });
  panel.add(slider);
  
  JPanel panel1=new JPanel(new GridLayout(1,2));
  jb1=new JButton("连续播放");
  panel1.add(jb1);
  jb1.addActionListener(sPanel);
  jb2=new JButton("停止播放");
  panel1.add(jb2);
  jb2.addActionListener(sPanel);
  
  panel.add(panel1);
  contentPane.add(panel,BorderLayout.NORTH);
  //center
  sPanel=new WPanel();
  contentPane.add(sPanel,BorderLayout.CENTER);
  setSize(300,400);
 }
 
 public static void main(String[]args){
  JavaTest javatest=new JavaTest("我喜欢你");
  javatest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  javatest.setVisible(true);
  javatest.pack();
 }
}
//WPanel.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class WPanel extends JPanel implements ActionListener{
 int m=0;
 Image image[]=new Image[50],image1;
 Timer timer; 
 public WPanel(){
  super();
  for(int i=1;i<=50;i++){
      Toolkit tk=getToolkit();
      image[i-1]=tk.getImage("图片\\"+i+".jpg");
     }
 }
 public void paint(Graphics g ){
  super.paint(g);
  image1=image[m+1];
  g.drawImage(image1, 0,0,this);
 }
 public void actionPerformed(ActionEvent e){
  if(e.getSource()==JavaTest.jb1){
      JavaTest.time=JavaTest.slider.getValue();
      timer=new Timer((int)JavaTest.time,this);
   timer.start();
  }
  if(e.getSource()==JavaTest.jb2){
   timer.stop();
  }
  if(e.getSource()==timer){
   if(m>=50)
    m=0;
   image1=image[m];
   m++;
   repaint();
  }
 }

为什么JPanel中的图片无法自动播放呀

解决方案 »

  1.   

    看我修改过的代码,在jdk6u17通过。
    //JavaTest.java
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.event.*;public class JavaTest extends JFrame {
    private static JSlider slider;
    private static JButton startButton,stopButton;
    private WPanel displayPanel;
    private static int time=1000;//单位毫秒
    private final int nImages = 50;
    private Image[] images = new Image[nImages];
    private Timer timer;
    private int current = 0;
    public JavaTest(String s){
    super(s);

    SwingUtilities.invokeLater(new Runnable(){
    public void run(){
    loadImages();
    }
    });

    Container contentPane=getContentPane(); JPanel controlPanel=new JPanel(new GridLayout(1,2));
    slider=new JSlider(JSlider.HORIZONTAL,0,5000,2000);  //控制浏览图片间隔时间
    slider.setBorder(BorderFactory.createTitledBorder("滑动最大时间为5秒"));
    controlPanel.add(slider); JPanel buttonsPanel=new JPanel();
    startButton=new JButton("Start");
    stopButton=new JButton("Stop");
    stopButton.setEnabled(false);
    buttonsPanel.add(startButton);
    buttonsPanel.add(stopButton);
     
    controlPanel.add(buttonsPanel);
    contentPane.add(controlPanel,BorderLayout.NORTH); displayPanel=new WPanel(images[0]);
    contentPane.add(new JScrollPane(displayPanel),BorderLayout.CENTER); slider.addChangeListener(new ChangeListener(){
    public void stateChanged(ChangeEvent e){
    time=slider.getValue();
    slider.setBorder(BorderFactory.createTitledBorder("间隔时间为"+time/1000+"秒"));
    }
    }); timer = new Timer(time,new ActionListener(){ public void actionPerformed(ActionEvent e){
    if(current < nImages -1){
    current ++;
    }
    else
    current = 0;
    displayPanel.setImage(images[current]);
    }
    });

    startButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    timer.start();
    slider.setEnabled(false);
    stopButton.setEnabled(true);
    startButton.setEnabled(false);
    }
    });
    stopButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    timer.stop();
    slider.setEnabled(true);
    startButton.setEnabled(true);
    stopButton.setEnabled(false);
    }
    });

    setBounds(100,100,300,400);
    } private void loadImages(){
    Toolkit kit = Toolkit.getDefaultToolkit();
    for(int i = 0; i < nImages; i++){
    images[i] = kit.getImage("图片\\"+ (i+1) + ".jpg");
    }
    } public static void main(String[]args){
    JavaTest javatest=new JavaTest("我喜欢你");
    javatest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //javatest.pack();
    javatest.setVisible(true);
    }
    }class WPanel extends JPanel{
    private Image image;
    public WPanel(Image image){
    this.image = image;
    setOpaque(false);
    }
    public void paintComponent(Graphics g ){
    g.drawImage(image, 0,0,this);
    super.paintComponent(g);
    }
    public void setImage(Image image){
    this.image = image;
    repaint();
    } public Dimension getPreferredSize(){
    return new Dimension(image.getWidth(null),image.getHeight(null));
    }

      

  2.   

    p.s. JButton jslider time 前面的 static 忘了删掉,重贴//JavaTest.java
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.event.*;public class JavaTest extends JFrame {
    private JSlider slider;
    private JButton startButton,stopButton;
    private WPanel displayPanel;
    private int time=1000;//单位毫秒
    private static final int nImages = 50;
    private Image[] images = new Image[nImages];
    private Timer timer;
    private int current = 0;
    public JavaTest(String s){
    super(s);

    SwingUtilities.invokeLater(new Runnable(){
    public void run(){
    loadImages();
    }
    });

    Container contentPane=getContentPane(); JPanel controlPanel=new JPanel(new GridLayout(1,2));
    slider=new JSlider(JSlider.HORIZONTAL,0,5000,2000);  //控制浏览图片间隔时间
    slider.setBorder(BorderFactory.createTitledBorder("滑动最大时间为5秒"));
    controlPanel.add(slider); JPanel buttonsPanel=new JPanel();
    startButton=new JButton("Start");
    stopButton=new JButton("Stop");
    stopButton.setEnabled(false);
    buttonsPanel.add(startButton);
    buttonsPanel.add(stopButton);
     
    controlPanel.add(buttonsPanel);
    contentPane.add(controlPanel,BorderLayout.NORTH); displayPanel=new WPanel(images[0]);
    contentPane.add(new JScrollPane(displayPanel),BorderLayout.CENTER); slider.addChangeListener(new ChangeListener(){
    public void stateChanged(ChangeEvent e){
    time=slider.getValue();
    slider.setBorder(BorderFactory.createTitledBorder("间隔时间为"+time/1000+"秒"));
    }
    }); timer = new Timer(time,new ActionListener(){ public void actionPerformed(ActionEvent e){
    if(current < nImages -1){
    current ++;
    }
    else
    current = 0;
    displayPanel.setImage(images[current]);
    }
    });

    startButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    timer.start();
    slider.setEnabled(false);
    stopButton.setEnabled(true);
    startButton.setEnabled(false);
    }
    });
    stopButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    timer.stop();
    slider.setEnabled(true);
    startButton.setEnabled(true);
    stopButton.setEnabled(false);
    }
    });

    setBounds(100,100,300,400);
    } private void loadImages(){
    Toolkit kit = Toolkit.getDefaultToolkit();
    for(int i = 0; i < nImages; i++){
    images[i] = kit.getImage("图片\\"+ (i+1) + ".jpg");
    }
    } public static void main(String[]args){
    JavaTest javatest=new JavaTest("我喜欢你");
    javatest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //javatest.pack();
    javatest.setVisible(true);
    }
    }class WPanel extends JPanel{
    private Image image;
    public WPanel(Image image){
    this.image = image;
    setOpaque(false);
    }
    public void paintComponent(Graphics g ){
    g.drawImage(image, 0,0,this);
    super.paintComponent(g);
    }
    public void setImage(Image image){
    this.image = image;
    repaint();
    } public Dimension getPreferredSize(){
    return new Dimension(image.getWidth(null),image.getHeight(null));
    }