package test;
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.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.GroupLayout;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileNameExtensionFilter;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class FrameCaptuer extends JFrame {
private JMenuItem jMenuItemCapture, jMenuItemClear, jMenuItemSaveAs,
jMenuItemExit, jMenuOpen;
private JMenuBar jMenuBar1;
private JMenu jMenuAction;
private JLabel jLabelShow;
private JScrollPane jScrollPaneGlobe;
private Image tempImage;
private JPEGImageEncoder encoder = null;
private JFileChooser fileChooser = new JFileChooser();
public FrameCaptuer() {
//菜单条
jMenuBar1 = new JMenuBar();
//菜单
jMenuAction = new JMenu();
//把菜单加入菜单条
jMenuAction = new JMenu("操作");
jMenuBar1.add(jMenuAction);
//在标签上加入滚动条
jLabelShow = new JLabel();
//滚动条
jScrollPaneGlobe = new JScrollPane(jLabelShow);
this.add(jScrollPaneGlobe);
/***********************************
*
* 定义菜单项对像并设置快捷键且加入菜单
*
*/
jMenuItemCapture = new JMenuItem();
jMenuItemCapture.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
InputEvent.CTRL_MASK));//快捷键
jMenuItemCapture.setText("开始截屏");
jMenuAction.add(jMenuItemCapture);
jMenuItemCapture.setEnabled(true);//是否被选择中
jMenuItemCapture.addActionListener(new Handler1());
jMenuItemClear = new JMenuItem("清空");
jMenuItemClear.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.CTRL_MASK));
jMenuAction.add(jMenuItemClear);
jMenuItemClear.setEnabled(false);//是否被选择中
jMenuItemClear.addActionListener(new Handler2());
jMenuItemSaveAs = new JMenuItem("保存");
jMenuItemSaveAs.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_MASK));
jMenuAction.add(jMenuItemSaveAs);
jMenuItemSaveAs.setEnabled(false);//是否被选择中
jMenuItemSaveAs.addActionListener(new Handler3());
jMenuItemExit = new JMenuItem("退出");
jMenuItemExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_MASK));
jMenuAction.add(jMenuItemExit);
jMenuItemExit.setEnabled(true);//是否被选择中
jMenuItemExit.addActionListener(new Handler4());
jMenuOpen = new JMenuItem("打开");
jMenuOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_K,
InputEvent.CTRL_MASK));
jMenuAction.add(jMenuOpen);
jMenuOpen.setEnabled(true);
jMenuOpen.addActionListener(new Handler5());
//窗体设置
this.setTitle("截屏示例");
this.setBounds(200, 200, 500, 350);
GroupLayout layout = new GroupLayout(getContentPane());
// this.setLayout(null);//(layout);//用默认的布局BorderLayout
//把菜单条加入窗体
this.setJMenuBar(jMenuBar1);
//关闭动作
this.setVisible(true);
this.setResizable(false);//设置窗口不可编辑
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/*******************************************************8
* 监听器
*
*/
//截屏
class Handler1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
Image caIm = this.createImage(); //截取当前屏幕图像
//将图像在jLabelShow中显示
jLabelShow.setIcon(new ImageIcon(tempImage = this.createImage()));
//其他菜单的状态
jMenuItemSaveAs.setEnabled(true);
jMenuItemClear.setEnabled(true);
jMenuItemCapture.setEnabled(false);
}
//截取当前屏幕图像的方法
private Image createImage() {
try {//截图代码开始
Image tempLocalImage = null;
Robot robot = new Robot();
Dimension dime = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle scrRect = new Rectangle(0, 0, dime.width, dime.height);
tempLocalImage = robot.createScreenCapture(scrRect);
//截图代码结束返回
return tempLocalImage;
} catch (AWTException e) {
e.printStackTrace();
}
return null;
}
}
//清空
class Handler2 implements ActionListener {
public void actionPerformed(ActionEvent e) {
jLabelShow.setIcon(null); //将jLabelShow中的图像清空
jMenuItemSaveAs.setEnabled(false);
jMenuItemClear.setEnabled(false);
jMenuItemCapture.setEnabled(true);
}
}
//保存
class Handler3 implements ActionListener {
public void actionPerformed(ActionEvent e) {
saveImage();
}
/***************************************************************************88*8
* /保存图像(重要)
*
*
*
*
*
*
*/
private void saveImage() {
fileChooser = new JFileChooser();
try {
int saved = fileChooser.showSaveDialog(null);//类里面调用用null,监听器里用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 e) {
e.printStackTrace();
}
}
}
//退出
class Handler4 implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
/*************************88
* 打开
* (重要)
*
*/
class Handler5 implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
//添加可以接收JPG图片的过滤器
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter(
"JPEG图片", "jpg", "jpeg"));
//1方法
fileChooser.showOpenDialog(null);//打开打开对话框
jLabelShow.setIcon(new ImageIcon(fileChooser.getSelectedFile()
.getAbsolutePath()));//把图片设置到JLabel
jMenuItemClear.setEnabled(true);
//2方法
// fileChooser.showOpenDialog(null);
// File file=fileChooser.getSelectedFile();
//
//
// try {
// Icon image = (Icon) ImageIO.read(file);
// jLabelShow.setIcon(image);
// jMenuItemClear.setEnabled(true);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
}
public static void main(String args[]) {
new FrameCaptuer();
}
}