为什么JPanel无法浏览图片。。。

caicaixuehua 2009-12-17 10:37:46
//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中的图片无法自动播放呀。。。
...全文
75 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
caicaixuehua 2009-12-18
  • 打赏
  • 举报
回复
谢谢呀。。。
huntor 2009-12-18
  • 打赏
  • 举报
回复
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));
}
}
huntor 2009-12-18
  • 打赏
  • 举报
回复
看我修改过的代码,在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));
}
}
sean1203 2009-12-17
  • 打赏
  • 举报
回复
支持
lovetysx 2009-12-17
  • 打赏
  • 举报
回复
再起一个线程ba
hugogoo 2009-12-17
  • 打赏
  • 举报
回复
sf,jf

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧