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 点击开始,选择一个文件夹

        Java小程序—录屏小程序(下半场)_第1张图片

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

        Java小程序—录屏小程序(下半场)_第2张图片

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

        Java小程序—录屏小程序(下半场)_第3张图片

        4.查看播放效果

           Java小程序—录屏小程序(下半场)_第4张图片

        总结:

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

              1.播放的画质特别渣

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

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

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

              5. ......

        

你可能感兴趣的:(Java小程序)