package watermark;
/**
* CaptureScreen.java
*/
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.*;
import javax.swing.*;
import watermark.MainFrame;
import java.io.*;
import javax.imageio.*;
import java.awt.image.*;
public class Main extends JFrame implements ActionListener {
private JButton start,cancel;
private JPanel c;
private BufferedImage get;
private JTabbedPane jtp;//一个放置很多份图片
private int index;//一个一直会递增的索引,用于标认图片
private JRadioButton system;//系统界面
/** Creates a new instance of CaptureScreen */
public Main() {
super("截取屏幕");
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//UIManager管理界面的类
}catch(Exception e){
e.printStackTrace();
}
initWindow();
initOther();
}
private void initOther(){
jtp=new JTabbedPane(JTabbedPane.TOP,JTabbedPane.SCROLL_TAB_LAYOUT);//JTabbedPane用于切换图片,显示子项
}
private void initWindow(){
start=new JButton("开始截取");
cancel=new JButton("退出");
start.addActionListener(this);
cancel.addActionListener(this);
JPanel buttonJP=new JPanel();
c=new JPanel(new BorderLayout());
JLabel jl=new JLabel("截取屏幕", JLabel.CENTER);//JLable类作用是用来对齐,居中
jl.setFont(new Font("黑体",Font.BOLD,40));
jl.setForeground(Color.RED);
c.add(jl,BorderLayout.CENTER);//将jl放入主面板中,并居中
buttonJP.add(start);
buttonJP.add(cancel);
buttonJP.setBorder(BorderFactory.createTitledBorder("公共操作区"));
JPanel jp=new JPanel();//放置一个单选按钮的面板
jp.add(system=new JRadioButton("系统界面",true));
system.addActionListener(this);
jp.setBorder(BorderFactory.createTitledBorder("界面风格"));
JPanel all=new JPanel();
all.add(jp);
all.add(buttonJP);
this.getContentPane().add(c,BorderLayout.CENTER);
this.getContentPane().add(all,BorderLayout.SOUTH);
this.setSize(500,400);
this.setLocationRelativeTo(null);//设置窗口相对于组件的位置
this.setVisible(true);//显示窗口
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void updates(){
this.setVisible(true);
if(get!=null){
//如果索引是0,则表示一张图片都没有被加入过,
//则要清除当前的东西,重新把tabpane放进来
if(index==0){
c.removeAll();
c.add(jtp,BorderLayout.CENTER);
}else{//否则的话,直接对tabpane添加面板就可以了
//就什么都不用做了
}
PicPanel pic=new PicPanel(get);
jtp.addTab("图片"+(++index),pic);
jtp.setSelectedComponent(pic);
SwingUtilities.updateComponentTreeUI(c); // 调整LookAndFeel(javax.swing)
}
}
private void doStart(){
try{
this.setVisible(false);//先隐藏窗口
Thread.sleep(500);//睡500毫秒是为了让主窗完全不见
Robot ro=new Robot(); // (通过本地操作)控制鼠标、键盘等实际输入源(java.awt)
//Robot类中有鼠标移动事件
Toolkit tk=Toolkit.getDefaultToolkit(); // AWT组件的抽象父类(java.awt)
//绑定工具包,将不同界面合并到一起
Dimension di=tk.getScreenSize();//Dimension封装长和宽
Rectangle rec=new Rectangle(0,0,di.width,di.height);//坐标类,可以创建一个矩形
BufferedImage bi=ro.createScreenCapture(rec);//访问图像数据缓冲区
JFrame jf=new JFrame();
Temp temp=new Temp(jf,bi,di.width,di.height); // 自定义的Temp类的对象
jf.getContentPane().add(temp,BorderLayout.CENTER);
jf.setUndecorated(true);//使标题一直存在
jf.setSize(di);
jf.setVisible(true);
jf.setAlwaysOnTop(true);
} catch(Exception e){
e.printStackTrace();
}
}
/**
*公用的处理保存图片的方法
*/
public void doSave(BufferedImage get){
try{
if(get==null){
JOptionPane.showMessageDialog(this
, "图片不能为空!!", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
JFileChooser jfc=new JFileChooser(".");
jfc.addChoosableFileFilter(new GIFfilter());
jfc.addChoosableFileFilter(new BMPfilter());
jfc.addChoosableFileFilter(new JPGfilter());
jfc.addChoosableFileFilter(new PNGfilter());
int i=jfc.showSaveDialog(this);//打开保存文件的对话框
if(i==JFileChooser.APPROVE_OPTION){//获得选中的文件对象
File file=jfc.getSelectedFile();//获得选中的文件
String about="PNG";
String ext=file.toString().toLowerCase();
javax.swing.filechooser.FileFilter ff=jfc.getFileFilter();
if(ff instanceof JPGfilter){
if(!ext.endsWith(".jpg")){
String ns=ext+".jpg";
file=new File(ns);
about="JPG";
}
} else if(ff instanceof PNGfilter){
if(!ext.endsWith(".png")){
String ns=ext+".png";
file=new File(ns);
about="PNG";
}
}else if(ff instanceof BMPfilter){
if(!ext.endsWith(".bmp")){
String ns=ext+".bmp";
file=new File(ns);
about="BMP";
}
}else if(ff instanceof GIFfilter){
if(!ext.endsWith(".gif")){
String ns=ext+".gif";
file=new File(ns);
about="GIF";
}
}
if(ImageIO.write(get,about,file)){
JOptionPane.showMessageDialog(this,"保存成功!");
} else
JOptionPane.showMessageDialog(this,"保存失败!");
}
} catch(Exception exe){
exe.printStackTrace();
}
}
/**
*公共的处理把当前的图片加入剪帖板的方法
*/
public void doCopy(final BufferedImage image){
try{
if(get==null){
JOptionPane.showMessageDialog(this
,"图片不能为空!!","错误",JOptionPane.ERROR_MESSAGE);
return;
} // java.awt.datatransfer(接口)
Transferable trans = new Transferable(){ // 内部类
//Transferable接口 不同介质间数据传输
public DataFlavor[] getTransferDataFlavors() {//返回一个DataFlavor数组
return new DataFlavor[] { DataFlavor.imageFlavor };//指定传输数据时的数据格式为图片数据
}
public boolean isDataFlavorSupported(DataFlavor flavor) {//判断当前传输数据的Transferable对象类型是否满足DataFlavor中的格式
return DataFlavor.imageFlavor.equals(flavor);
}
public Object getTransferData(DataFlavor flavor)//返回一个Transferable数据传输对象
throws UnsupportedFlavorException, IOException {
if(isDataFlavorSupported(flavor))
return image;
throw new UnsupportedFlavorException(flavor);
}
};
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null);//将Clipboard作为剪切板工具接口
JOptionPane.showMessageDialog(
没有合适的资源?快使用搜索试试~ 我知道了~
基于Java的QQ屏幕截图工具的设计与实现
共41个文件
class:27个
java:10个
project:1个
需积分: 3 0 下载量 95 浏览量
2024-05-13
21:54:35
上传
评论
收藏 108KB ZIP 举报
温馨提示
本软件采用Java语言进行模拟qq截图功能,获取屏幕方式灵活,可以获取指定的屏幕,并且可以对获取到的截图进行存储,编辑(添加文字)等操作,对这些操作设置了自定义热键。该软件主要有捕获光标功能,可以指定截取屏幕的区域。软件具有捕捉光标,可以随着鼠标的移动获取屏幕区域,为之后的存储和编辑提供前置条件。图片可以自命名,获取到的截图可以依据当前系统时间进行命名,也可以通过模板(文件名)进行命名,拥有自命名功能。获取到的截图可以在窗口中央位置进行预览,并且可以指定存储区域将截图用bmp,jpeg,png(静态), gif(动态)其中的某一种图像格式将其存储,拥有预览和存储功能。可以直接将获取到的截图复制到剪切板中,之后可以从剪切板中粘贴到word等文档中。多层菜单栏,可以获取一到多个截图,并以多个界面显示出来,拥有层叠功能。可以通过编辑为截图添加文字,为截图添加一些描述信息之后仍可以将截图存储,用户有编辑功能。 展望未来,为了更方便的获取信息,可以将此截图工具进行扩充,添加一些其他功能,比如可以添加画笔,进行涂鸦。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java的QQ屏幕截图工具的设计与实现.zip (41个子文件)
基于Java的QQ屏幕截图工具的设计与实现
.classpath 232B
asas 11KB
src
watermark
PreviewImage.java 2KB
Common.java 3KB
MainFrame.java 11KB
ImageTool.java 7KB
ImageDropTargetListener.java 4KB
Main.java 23KB
ButtonAction.java 7KB
BMPLoader.java 10KB
CommandButton.java 783B
FileBean.java 575B
watermark.jar 30KB
bin
watermark
Main$Temp.class 8KB
MainFrame$1.class 890B
PreviewImage$1.class 1KB
Main$2.class 485B
Main$1.class 1KB
ButtonAction.class 8KB
PreviewImage$DragPicListener.class 2KB
Main$BMPfilter.class 909B
Main$GIFfilter.class 909B
Main$PNGfilter.class 1015B
PreviewImage.class 2KB
BMPLoader.class 5KB
BMPLoader$BitmapHeader.class 1KB
Main.class 8KB
Main$PicPanel.class 2KB
ImageDropTargetListener.class 5KB
PreviewImage$2.class 785B
CommandButton$ButtonStyle.class 2KB
MainFrame.class 10KB
MainFrame$UIClassName.class 2KB
Main$JPGfilter.class 909B
Common.class 4KB
CommandButton.class 734B
ImageTool.class 7KB
States.class 2KB
ButtonAction$1.class 965B
FileBean.class 919B
.project 385B
共 41 条
- 1
资源评论
ShaZiJ
- 粉丝: 513
- 资源: 35
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功