下半场。

上半场,我们我们写了录屏的程序,那么下半场我们的任务是写一个播放器。

设计思路:播放器的思路就是将图片放在一个JScrollPane中顺序播放,所以还是得使用swing组件,并且仍然要使用线程。

package Frame;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException; import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane; public class Player extends JFrame {
File file;
JLabel label;
JButton play;
BufferedImage bufferedImage;
JScrollPane jsp; JProgressBar loading;// 进度条 public Player() {
setTitle("播放器V1.0");
setSize(400, 500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout()); loading = new JProgressBar();
label = new JLabel();
// label.setBackground(Color.BLUE);
jsp = new JScrollPane(label);
play = new JButton("播放");
add(jsp, BorderLayout.CENTER);
JPanel jp = new JPanel();
jp.setLayout(new FlowLayout());
jp.add(play);
jp.add(loading);
add(jp, BorderLayout.SOUTH); play.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int cnt = chooser.showOpenDialog(null);
if (cnt == 0) {
file = chooser.getSelectedFile();
new Play().start();
}
}
});
setVisible(true);
} public class Play extends Thread {
public void run() {
// 获得文件夹下所有的文件
File[] files = file.listFiles();
loading.setValue(0);
loading.setMaximum(files.length);
int index=0;
for (File f : files) {
try {
// 从文件中读取图片到内存中
bufferedImage = ImageIO.read(f);
Image image = bufferedImage.getScaledInstance(jsp.getWidth(), jsp.getHeight(),Image.SCALE_SMOOTH);// 最后一个参数为平滑渲染
ImageIcon icon = new ImageIcon(image);
label.setIcon(icon);
index++;
loading.setValue(index);
Thread.sleep(250);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} public static void main(String[] args) {
new Player();
}

上述代码中我们用swing组件做了一个播放器的界面,在播放按钮中添加监听事件,并且在点击的时候弹出一个文件选择器,然后在下面的线程方法中获取用户选择的文件夹路径,然后将获取的文件夹路径的图片读到缓存中,然后用图片缓存技术平滑的展示图片。同时我们在界面中写了一个进度条,进度条的动画是根据图片的剩余张数来显示。

测试:

1.运行Recoder.java 点击开始,选择一个文件夹

2.点击保存,10s后点击停止,查看所选文件夹中的文件

3.运行Player.java  点击播放,选择要播放的文件夹路径

4.查看播放效果

总结:

虽然我们成功的实现了录屏的效果,但是还有很多不足的地方:

1.播放的画质特别渣

2.播放器中少了暂停和继续播放的功能

3.播放器的进度条单一,没有数字提示播放进程

4.播放的过程中存在卡顿的效果

5. ......

最新文章

  1. [LeetCode] Random Pick Index 随机拾取序列
  2. 【转】SharePoint camel query查询 event 或者Calendar 日历列表的时候,怎么查询所有的重复发生的事件
  3. C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
  4. smartjs 0.2 OOP讲解 - factory
  5. Git代码管理心得
  6. ARM汇编常用指令
  7. 去除下载电影和电视剧文件名中的多余字符[python实现]
  8. HDU2015校赛 The Magic Tower
  9. codeforces Codeforces 650A Watchmen
  10. xfire发布的Webservice中Spring注入为空的解决方案
  11. SQL入门学习6-集合运算
  12. [Luogu4074][WC2013]糖果公园
  13. Java面试总结(二)
  14. pycharm(Python编辑器)的激活
  15. 常用的 Linux 命令
  16. Asp.Net_<asp:RadioButtonList
  17. My new English
  18. Java数据结构和算法(一)散列表
  19. pygame学习笔记(1)——安装及矩形、圆型画图
  20. IIS 无法显示网页问题

热门文章

  1. 在mac上如何用safari调试ios手机的移动端页面
  2. CodeForce 137B
  3. MediaFoundation初步研究
  4. 使用微软易升安装纯净版win10
  5. openerp学习笔记 视图中字段只变化(on_change)联动其他字段值、选择和过滤
  6. 2019-8-13未命名文件 sdfsdfsdfsdfsdfsdf
  7. 手机APP流量的发送与获取功能的实现
  8. Js实现京东无延迟菜单效果(demo) 慕课网
  9. 【汇总】数据库提权(mysql、mssql)
  10. EL表达式与JSTL标签库(二)