新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
一个图片时你知道,现在只是切换的问题?
创新互联公司长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为萧县企业提供专业的做网站、网站制作,萧县网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
给按钮添加一个 ActionListener,在它的 actionPerformed 方法中做你的事情,把 jpanel.setIcon(..) 换张图片。
自己写的代码。能通过测试
题目中的要求用线程实现图片的切换
主要有两种方式可以实现。一种是Swing包下的Timer类。一种是Thread类
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MousDemo extends JFrame {
MyJPanel mp;
int index;
ImageIcon[] imgs = { new ImageIcon("C:\\Users\\lenovo\\Desktop\\a.png"),
new ImageIcon("C:\\Users\\lenovo\\Desktop\\b.png") };
public MousDemo() {
mp = new MyJPanel(false);
this.add(mp);
this.setSize(300, 200);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setTitle("鼠标窗口");
this.setVisible(true);
/**
* 方式一,使用TImer来切换图片
* Swing下的Timer组件,个人觉得非常适合
* Timer(200,new ActionListener());意思就是每200毫秒执行一次ActionListener里面的方法
* */
Timer timer = new Timer(200,new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
mp.flag = !mp.flag;
mp.repaint();
}
});
timer.start();
/**
* 方法二:
* 线程的方式
* */
// new Thread(new Runnable() {
//
// @Override
// public void run() {
// while(true){
// mp.flag = !mp.flag;
// mp.repaint();
// try {
// Thread.sleep(200);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }
//
// }
// }).start();
}
public static void main(String[] args) {
new MousDemo();
}
class MyJPanel extends JPanel{
boolean flag;
public MyJPanel(boolean flag) {
this.flag = flag;
}
@Override
public void paint(Graphics g) {
super.paint(g);
if(flag == false){
g.drawImage(imgs[0].getImage(), 0, 0,this);
}else{
g.drawImage(imgs[1].getImage(), 0, 0,this);
}
}
}
}
如果是普通切换的话,直接定义一个int值,根据int值的不同 来画不同的东西就可以了\x0d\x0aint index;\x0d\x0aswitch(index){\x0d\x0a case 0:\x0d\x0a g.drawImage(a,0,0,20); \x0d\x0a break;\x0d\x0a case 1:\x0d\x0a g,drawImage(b,0,0,20);\x0d\x0a break;\x0d\x0a .................................\x0d\x0a}\x0d\x0a \x0d\x0a如果用渐变效果的话,创建一个数组记录下一张要话的图片的所有RGB值,初始设置所有像素点的透明度为100%,即完全透明,然后一点点的把透明度降低,直到为0,这样就把第二章图片用渐变的方法绘制出来了,这时就可以不用画第一张图片了。
使用线程做Thread,或者实现Runnable的接口
使用Timer类做,定时器
使用spring做
例如:
class ChangeImageTask extends TimerTask {
public void run() {
int amount = WithBackgroundImageJPanel.this.allImages.size();
System.out.println("all pictures:" + amount);
if (amount 0) {
int index = WithBackgroundImageJPanel.this.currentImageIndex;
index++;
index = index % amount;
System.out.println("current pic:" + index);
WithBackgroundImageJPanel.this.currentBackgroundImage = WithBackgroundImageJPanel.this.allImages
.get(index);
WithBackgroundImageJPanel.this.currentImageIndex = index;
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
WithBackgroundImageJPanel.this.repaint();
}
});
参考代码,
注意图片的路径,拿不准的话,就使用绝对路径吧
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//我的图片路径是 src\\images\\1.gif .有四张 从1.jpg~~4.jpg
public class ImageDemo extends JFrame {
JLabel jl;
JPanel jp;
public ImageDemo() {
jp = new JPanel();
int i;
for (i = 0; i 4; i++) {
if(i ==0){//初始化的时候,默认显示的图片
jl = new JLabel(new ImageIcon("src\\images\\"+1+".gif"));
}
//按钮
JButton jb = new JButton("第"+(i+1)+"张图");
int z = i;
//当按钮点击的时候
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//设置jl的图片
jl.setIcon(new ImageIcon("src\\images\\"+(z+1)+".gif"));
}
});
jp.add(jb);
}
this.setLocation(200, 120);
this.setSize(500,200);
this.setLayout(new BorderLayout());
this.add(jl);
this.add(jp,BorderLayout.SOUTH);
this.setTitle("图片浏览");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
new ImageDemo();
}
}
现在没空帮你写代码了,给你个思路自己写吧!轮播肯定是要切换图片的,并且一般切换的时候是从左到右或从右到左慢慢切的,所以你定义一个图片地址数组,再定义两个jlabel用来显示图片,一个JLabel显示当前图片,另一个显示最新图片!好了,现在你定义一个timer定时器来切换,每隔两秒,就判断一下最新的图片是哪个jlabel,然后将另一个jlabel填充新的图片,然后setlocation()来移动图片,x坐标每次向左几个像素,直至移动完成!这样就是一次轮播,当然你需要将两个jlabel放到一个panel中,免得会出现第二个图片多出一截在慢慢移动的情况