⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 framecapture.java

📁 实现了抓获屏幕的功能
💻 JAVA
字号:
/*
 * FrameCapture.java
 *
 * Created on 2007年7月24日, 下午3:36
 */

package capturescreen;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;

/**
 *
 * @author  linda
 */
public class FrameCapture extends javax.swing.JFrame {
    
    /** Creates new form FrameCapture */
    public FrameCapture() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" 生成的代码 ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jScrollPaneGlobe = new javax.swing.JScrollPane();
        jLabelShow = new javax.swing.JLabel();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenuAction = new javax.swing.JMenu();
        jMenuItemCapture = new javax.swing.JMenuItem();
        jMenuItemSaveAs = new javax.swing.JMenuItem();
        jMenuItemClear = new javax.swing.JMenuItem();
        jMenuItemExit = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jScrollPaneGlobe.setViewportView(jLabelShow);

        jMenuAction.setText("\u64cd\u4f5c");
        jMenuItemCapture.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemCapture.setText("\u5f00\u59cb\u622a\u5c4f");
        jMenuItemCapture.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemCaptureActionPerformed(evt);
            }
        });

        jMenuAction.add(jMenuItemCapture);

        jMenuItemSaveAs.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemSaveAs.setText("\u53e6\u5b58\u4e3a");
        jMenuItemSaveAs.setEnabled(false);
        jMenuItemSaveAs.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemSaveAsActionPerformed(evt);
            }
        });

        jMenuAction.add(jMenuItemSaveAs);

        jMenuItemClear.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemClear.setText("\u6e05\u7a7a");
        jMenuItemClear.setEnabled(false);
        jMenuItemClear.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemClearActionPerformed(evt);
            }
        });

        jMenuAction.add(jMenuItemClear);

        jMenuItemExit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemExit.setText("\u9000\u51fa");
        jMenuItemExit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemExitActionPerformed(evt);
            }
        });

        jMenuAction.add(jMenuItemExit);

        jMenuBar1.add(jMenuAction);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPaneGlobe, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPaneGlobe, javax.swing.GroupLayout.DEFAULT_SIZE, 279, Short.MAX_VALUE)
        );
        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jMenuItemExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemExitActionPerformed
        System.exit(0);  //退出程序
    }//GEN-LAST:event_jMenuItemExitActionPerformed

    private void jMenuItemClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemClearActionPerformed
        this.jLabelShow.setIcon(null);  //将jLabelShow中的图像清空
        this.jMenuItemSaveAs.setEnabled(false);
        this.jMenuItemClear.setEnabled(false);
        this.jMenuItemCapture.setEnabled(true); 
    }//GEN-LAST:event_jMenuItemClearActionPerformed

    private void jMenuItemSaveAsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemSaveAsActionPerformed
       this.saveImage();   //调用saveIcon方法保存当前屏幕图像
    }//GEN-LAST:event_jMenuItemSaveAsActionPerformed

    private void jMenuItemCaptureActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemCaptureActionPerformed
       Image captureImage=this.createImage();   //截取当前屏幕图像
       //将图像在jLabelShow中显示
       jLabelShow.setIcon(new ImageIcon(tempImage=this.createImage()));
       this.jMenuItemSaveAs.setEnabled(true);
       this.jMenuItemClear.setEnabled(true);
       this.jMenuItemCapture.setEnabled(false);
    }//GEN-LAST:event_jMenuItemCaptureActionPerformed
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FrameCapture().setVisible(true);
            }
        });
    }

    private JPEGImageEncoder encoder = null;

    private JFileChooser fileChooser = new JFileChooser()
;

    private Image tempImage = null;

    private Image createImage() {
            try {//截图代码开始
            Image tempLocalImage=null;
            Robot robot=new Robot();
            Dimension dimension= Toolkit.getDefaultToolkit().getScreenSize();
            Rectangle scrRect=new Rectangle(0,0,dimension.width,dimension.height);
            tempLocalImage=robot.createScreenCapture(scrRect);
             //截图代码结束
             return tempLocalImage;
        } catch (AWTException ex) {
            ex.printStackTrace();
        }
        return null;}

    public void saveImage() {
             try
	{       
         int saved=fileChooser.showSaveDialog(this);
         if(saved==JFileChooser.APPROVE_OPTION)
         {
             //获取要设置的文件名(包括路径)
             File saveFileName=fileChooser.getSelectedFile();
             //获取要保存文件的名字
             String fileName=new String(saveFileName.getPath()+".jpg");
             //1.首先创建一个输出流
             FileOutputStream fileOutPut=new FileOutputStream(fileName);
            //2.然后把输出流用JPEG编码器进行包裹,其实就是把输出流连接到编码器
            encoder=JPEGCodec.createJPEGEncoder(fileOutPut);
            //把BufferedImage对象进行编码
            encoder.encode((BufferedImage) tempImage);
            fileOutPut.flush();
	    fileOutPut.close();
            }
         }		 
	catch(Exception ea)
	{
	     ea.printStackTrace();
	}         }
    
    // 变量声明 - 不进行修改//GEN-BEGIN:variables
    javax.swing.JLabel jLabelShow;
    javax.swing.JMenu jMenuAction;
    javax.swing.JMenuBar jMenuBar1;
    javax.swing.JMenuItem jMenuItemCapture;
    javax.swing.JMenuItem jMenuItemClear;
    javax.swing.JMenuItem jMenuItemExit;
    javax.swing.JMenuItem jMenuItemSaveAs;
    javax.swing.JScrollPane jScrollPaneGlobe;
    // 变量声明结束//GEN-END:variables
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -