/** * @date 2022/3/27 - 22:54 */ import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.File; import java.io.IOException; /** * 电子相册 * 需求:制作电子相册,图片进行淡入,进行切换 * 思路: * 1.先有框架 * 2.有面板来承接图片 * 3.有进行切换的图片组 * 4.获取到图片之后显示到面板中 * 5.根据改变图片的透明度实现淡入的效果 * * */ public class EImage extends JPanel{ //用来显示画的图片 BufferedImage bgImage; public static void main(String[] args) { //先创建框架 JFrame imageJrame = new JFrame(); //设置框架大小 imageJrame.setSize(300,600); //设置框架标题 imageJrame.setTitle("电子相册"); //设置框架居中显示 imageJrame.setLocationRelativeTo(null); imageJrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //创建面板,用来承接图片,将面板添加到框架中 EImage image = new EImage(); imageJrame.add(image); //初始化图片 image.initImage(); //显示到面板中 image.begin(); //进行显示框架 imageJrame.setVisible(true); } int num = 0; Float ff = 0.0f; //另外开启一个线程来改变ff的值,透明度 private void begin() { new Thread(new Runnable() { @Override public void run() { // 切换效果 while(true){ bgImage=images[num]; num++; if(num == 4){ num = 0; } //淡出效果 while(true){ if(ff!=100){ ff=ff+20; repaint(); }else{ ff =0.0f; break; } try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } } } } }).start(); } //将图片画到面板中 @Override public void paint(Graphics g) { super.paint(g); if(bgImage!=null){ Graphics2D graphics2D = (Graphics2D) g; //设置图片透明度:淡出效果 graphics2D.setComposite(AlphaComposite.SrcOver.derive(ff/100f)); graphics2D.drawImage(bgImage,0,0,bgImage.getWidth(),bgImage.getHeight(),null); } } BufferedImage[] images = new BufferedImage[5]; //获取图片。并将图片存入到数组中 private void initImage() { //获取5张图片。读取 for (int i = 1; i <=5 ; i++) { try { BufferedImage myImage = ImageIO.read(new File("src/images/bg"+i+".png")); images[i-1]=myImage; } catch (IOException e) { e.printStackTrace(); } } //设置画板图片 bgImage = images[0]; } }