Java小程序—录屏小程序(下半场)
下半场。
上半场,我们我们写了录屏的程序,那么下半场我们的任务是写一个播放器。
设计思路:播放器的思路就是将图片放在一个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. ......
Java小程序—录屏小程序(下半场)的更多相关文章
- Java小程序—录屏小程序(上半场)
做软件的三个步骤: (1)做什么? (2)怎么做? (3)动手做! ok,我们今天要做的是一个录屏软件,那怎么做呢?首先,我们小时候都玩过一种小人书,就是当你快速翻动书页时,书中的人物就会活灵活现的动 ...
- 再见,付费录屏软件!我用70行Python代码打造免费版!
- appium+java(五)微信小程序自动化测试实践
前言: 上一篇<appium+java(四)微信公众号自动化测试实践>中,尝试使用appium实现微信公众号自动化测试,接着尝试小程序自动化,以学院小程序为例 准备工作 1.java-cl ...
- 微信小程序 - 骨架屏
骨架屏 - “与其等待网络加载,不如提前给点暗示” 注:不适用复杂交互效果 演示 示例解释以及使用全在index.wxml中,观看需了解组件使用. 示例下载:微信小程序-骨架屏演示
- Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战
Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品 ...
- Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战
Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战 说明:Java生鲜电商平台拼团是拉新引流的利器,将拼团运用到极致的就是拼多多,前期通过选取性价比高.实用性强的商品进行拼团,在社交圈(主要 ...
- 微信小程序代码大全 - 小程序开发福利
小程序QQ交流群:131894955 小程序开发文档(Wepy) 小程序商城源码下载(weixin-app-shop) 小程序官网源码下载(weixin-app-cms) 微信管家平台JAVA版开源下 ...
- 微信小程序转百度小程序修改
百度小程序对比微信小程序(最初版):[设备]项里没有内存监控.iBeacon.wifi.蓝牙.用户截屏.手机联系人.NFC[位置]项里没有打开地图选择位置[界面]项里没有绘图功能.没有节点信息获取功能 ...
- vue+uni-app商城实战 | 第一篇:【有来小店】微信小程序快速开发接入Spring Cloud OAuth2认证中心完成授权登录
一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...
随机推荐
- Git本地安装
1 Git简介 Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码 ...
- ansible模块文件操作
Ansible常用模块文件操作 [root@tiandong etc]# ansible-doc -l 列出ansible所支持的模块 [root@tiandong ~]# ansible-doc ...
- 深入聚焦 call,apply 和 bind
在JavaScript 中,call.apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这 ...
- Liunx 命令之链接操作
Linux 系统中有软链接和硬链接两种特殊的"文件". 软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录. 硬链接则透过文件系统的inode来产生新档名 ...
- .net 查壳工具
请问大神.NET查壳工具都有哪些? 已知的有DotNet Id 除了这个还有别的吗?脱MAXTOCODE发现是双壳.脱掉第一层还有一层,DotNet Id检测没壳了,但是反编译还是加密状态. 用 ...
- Gradle DSL method not found: 'compile()'
问题描述: 今天在导入第三方库的时候报错:Gradle DSL method not found: 'compile()' 通过网上查询发现是自己导包路径错误:应该导入app下面的build.grad ...
- kubernetes学习:CKA考试题
1. 列出环境内所有的pv 并以 name字段排序(使用kubectl自带排序功能) kubectl get pv --sort-by=.metadata.name 2. 列出指定pod的日志中状态为 ...
- 惠州双月湾游记 & 攻略
惠州双月湾游记&攻略 2019 年的 11 月底和小朱.Josie 约了快乐周末去惠州双月湾玩! 我和时猪一起从武汉出发到广州,然后和他们俩一起从广州自驾去的惠州.大致行程如下: Day 1: ...
- 【转】Java IOUtils方式上传下载文件 on HDFS
[From]https://www.cnblogs.com/areyouready/p/9795442.html package com.css.hdfs04; import java.io.File ...
- 关于ckeditor在IE下出现不兼容的问题
今天在用ckeditor时在ie下测试出现了不兼容问题,样式,字体等属性设置不了. 后来在html标签上方添加了: <!DOCTYPE html PUBLIC "-//W3C//DTD ...