Java电子相册
package com.company;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
/*1.弄明白要干什么?;2.怎么做?即实现的思路,慢慢培养,通过记笔记,写注释等方法;3.填代码(有一些方法可以查看文档,视频,或者查看源码);4.完整代码实现,调试bug*/
/*培养自己的思路,思想*/
/*电子相册*/
public class MyImage extends JPanel
{
//定义一个成员图片对象
static BufferedImage bgImage; //表示当前窗口正在显示的一张图片
public static void main(String[] args) {
//创建一个窗口
JFrame frame = new JFrame();
//设置大小
frame.setSize(1366,768);
//设置标题
frame.setTitle("Java版的电子相册");
//居中显示窗口
frame.setLocationRelativeTo(null);
//关闭窗口,JVM关闭
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //值是固定的为3
//**************将图片显示在窗口上,相当于给图片设置一个背景**************
//创建一个面板对象
//JPanel jPanel = new JPanel();
MyImage myImage = new MyImage();
//把面板对象存放在窗口上
//frame.add(jPanel); //窗口上放了面板
frame.add(myImage);
//初始化图片的方法
myImage.initImages();
//把图片画到窗口上,调用绘图方法
//重绘
myImage.repaint();
//写一个方法,让ff一直变,开启新的线程
myImage.begin();
//显示窗口
frame.setVisible(true);
}
//标志,表示图片数组下标的索引
int num = 0;
/*让ff的值一直变,淡入效果实现*/
public void begin(){
//启动线程
new Thread(new Runnable() {
@Override
public void run() {
//一直改变ff的值
while(true){
//从数组中取图片
bgImage = images[num];
//让num累加
num++;
//考虑数组越界异常
if(num == 4){
num = 0;
}
while(true){ //慢慢显示图片
if(ff < 100f){
ff += 2f;
//调用重绘方法
repaint();
} else{
ff = 0f;
break;
}
//加休眠
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();
}
//图片显示比例
static float ff = 0f;
//需要重写父类的绘图方法,提供绘图的方法。ctrl+o
//Graphics g 画笔 画图片
@Override
public void paint(Graphics g) {
super.paint(g);
//转换成子类对象,提供了更多的方法
Graphics2D graphics2D = (Graphics2D) g;
//画什么?
if(bgImage != null){
//加入淡入效果
graphics2D.setComposite(AlphaComposite.SrcOver.derive(ff / 100f)); //变比列达到淡入效果
//把图片画到窗口上去
g.drawImage(bgImage,0,0,bgImage.getWidth(),bgImage.getHeight(),null); //从左上角画
}
}
//定义图片类型的数组
static BufferedImage [] images = new BufferedImage[4]; //BufferedImage图片类
/*加载提前准备好的一些图片*/
public static void initImages()
{
try
{
//编写for循环
for (int i=1; i<=4; i++)
{
//每循环一次,都需要加载一张图片
BufferedImage image = ImageIO.read(MyImage.class.getResource("/images/bg" + i + ".jpg")); //点击try...catch...环绕
//每读取到一张图片对象,把它存放在数组中
images[i-1] = image; //图片数组下标减一=逻辑图片位置
}
//给成员变量赋值
bgImage = images[0];
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
注:需要读者自己准备images图片包,上文中以4张图片为例!
初做Java小项目,难免会有问题,希望能够能够得到批评指正,谢谢!