java 录屏_java 录屏 小工具源码(idea)

该博客介绍了一个使用Java编写的桌面录屏小工具,视频保存在系统临时目录。程序包括开始、暂停、继续、停止和播放等功能,实现了全屏播放和退出全屏。核心代码涉及了Robot类用于屏幕捕获,以及处理音频和视频的编码与解码。
摘要由CSDN通过智能技术生成

【实例简介】录制的视频保存在 java.io.tmpdir 目录,windows通常为 C:\Users\Administrator\AppData\Local\Temp

【实例截图】

5a38b6a93665beea9a39eae7a0bc0459.png

9ff29a94fdcbcf8e18f44113ad23a837.png

点击播放后,效果如下:

f02b445498a5dd6217a5f5a20cb4d03f.png

【核心代码】

import java.awt.AWTException;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.GridLayout;

import java.awt.MouseInfo;

import java.awt.Point;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.Closeable;

import java.io.File;

import java.io.IOException;

import java.io.RandomAccessFile;

import java.nio.ByteBuffer;

import java.nio.MappedByteBuffer;

import java.nio.channels.FileChannel;

import java.nio.channels.FileChannel.MapMode;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.concurrent.BlockingQueue;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.LinkedBlockingQueue;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.TimeUnit;

import java.util.zip.ZipEntry;

import java.util.zip.ZipInputStream;

import java.util.zip.ZipOutputStream;

import javax.imageio.ImageIO;

import javax.sound.sampled.AudioFormat;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.DataLine;

import javax.sound.sampled.SourceDataLine;

import javax.sound.sampled.TargetDataLine;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;

/**

* java录像小程序: 视频文件保存在系统临时目录, 回车全屏播放, ESC退出全屏播放

* @author dgqjava

*

*/

@SuppressWarnings("serial")

public class MainFrame extends JFrame {

private static final int WIDTH = 200;

private static final int HEIGHT = 70;

private static final Color BUTTON_COLOR = new Color(155, 183, 214);

private static final Color BUTTON_FOCUS_COLOR = new Color(87, 156, 242);

private static final Color BUTTON_DISABLE_COLOR = new Color(180, 207, 229);

private static final Font BUTTON_FONT = new Font("华文行楷", Font.BOLD, 15);

private static final String DEFAULT_FILE_PATH = System.getProperty("java.io.tmpdir");

private static Dimension screenSize;

private final JButton start = new JButton("开始");

private final JButton pause = new JButton("暂停");

private final JButton restart = new JButton("继续");

private final JButton stop = new JButton("完成");

private final JButton play = new JButton("播放");

private final JButton close = new JButton("退出");

private String currentFilePath;

public MainFrame() {

setUndecorated(true);

setSize(WIDTH, HEIGHT);

Toolkit tk = Toolkit.getDefaultToolkit();

screenSize = tk.getScreenSize();

setLocation((int) screenSize.getWidth() - WIDTH, (int) (screenSize.getHeight() - tk.getScreenInsets(getGraphicsConfiguration()).bottom - HEIGHT));

MouseListener buttonMouseListener = new MouseAdapter() {

public void mouseEntered(MouseEvent e) {

JButton btn = (JButton) e.getSource();

if(btn.isEnabled()) {

btn.setBackground(BUTTON_FOCUS_COLOR);

}

}

public void mouseExited(MouseEvent e) {

JButton btn = (JButton) e.getSource();

if(btn.isEnabled()) {

btn.setBackground(BUTTON_COLOR);

}

}

};

start.addMouseListener(buttonMouseListener);

pause.addMouseListener(buttonMouseListener);

restart.addMouseListener(buttonMouseListener);

stop.addMouseListener(buttonMouseListener);

play.addMouseListener(buttonMouseListener);

close.addMouseListener(buttonMouseListener);

ChangeListener changeListener = new ChangeListener() {

public void stateChanged(ChangeEvent e) {

JButton btn = (JButton) e.getSource();

if(btn.isEnabled()) {

btn.setBackground(BUTTON_COLOR);

} else {

btn.setBackground(BUTTON_DISABLE_COLOR);

}

}

};

start.addChangeListener(changeListener);

pause.addChangeListener(changeListener);

restart.addChangeListener(changeListener);

stop.addChangeListener(changeListener);

play.addChangeListener(changeListener);

start.setFont(BUTTON_FONT);

pause.setFont(BUTTON_FONT);

restart.setFont(BUTTON_FONT);

stop.setFont(BUTTON_FONT);

play.setFont(BUTTON_FONT);

close.setFont(BUTTON_FONT);

start.setBackground(BUTTON_COLOR);

pause.setBackground(BUTTON_DISABLE_COLOR);

restart.setBackground(BUTTON_DISABLE_COLOR);

stop.setBackground(BUTTON_DISABLE_COLOR);

play.setBackground(BUTTON_DISABLE_COLOR);

close.setBackground(BUTTON_COLOR);

pause.setEnabled(false);

restart.setEnabled(false);

stop.setEnabled(false);

play.setEnabled(false);

start.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

start.setEnabled(false);

pause.setEnabled(true);

stop.setEnabled(true);

play.setEnabled(false);

currentFilePath = DEFAULT_FILE_PATH System.currentTimeMillis();

RecordHelper.start(currentFilePath);

}

});

pause.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

pause.setEnabled(false);

restart.setEnabled(true);

stop.setEnabled(false);

RecordHelper.pause();

}

});

restart.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

pause.setEnabled(true);

restart.setEnabled(false);

stop.setEnabled(true);

RecordHelper.restart();

}

});

stop.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值