package day001;
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 javax.swing.border.Border;
import javax.xml.ws.FaultAction;
import java.io.*;
import javax.imageio.*;
import java.awt.image.*;
public class CaptureScreen extends JFrame implements ActionListener {
private JRadioButton java,system;
private JButton start,cancel;
private JPanel d;
private BufferedImage get;
private JTabbedPane jtp;
private int index;
public CaptureScreen() {
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(Exception e){
e.printStackTrace();
}
initWindow();
initOther();
}
private void initOther(){
jtp=new JTabbedPane(JTabbedPane.TOP,JTabbedPane.SCROLL_TAB_LAYOUT);
}
private void initWindow(){
ImageIcon image = new ImageIcon("c://a.jpg");//c盘下的图片文件的引用
start=new JButton("开始截取");
start.setBackground(Color.yellow);
cancel=new JButton("最后退出");
cancel.setBackground(Color.green);
start.addActionListener(this);
cancel.addActionListener(this);
JPanel buttonJP=new JPanel();
d=new JPanel(new BorderLayout());
JLabel jl=new JLabel("公共展示区", JLabel.CENTER);
JLabel l1=new JLabel(image,JLabel.CENTER);
image=new ImageIcon(image.getImage().getScaledInstance(380, 160, Image.SCALE_DEFAULT));
l1.setIcon(image);
jl.setFont(new Font("黑体",Font.BOLD,27));
jl.setForeground(Color.LIGHT_GRAY);
d.add(jl,BorderLayout.SOUTH);
d.add(l1,BorderLayout.CENTER);
buttonJP.add(start);
buttonJP.add(cancel);
buttonJP.setBorder(BorderFactory.createTitledBorder("截图操作"));
JPanel jp=new JPanel();//放置两个单选按钮的面板
jp.add(java=new JRadioButton("java界面"));
jp.add(system=new JRadioButton("系统界面",true));
java.addActionListener(this);
system.addActionListener(this);
jp.setBorder(BorderFactory.createTitledBorder("界面风格"));
JPanel all=new JPanel();
all.add(jp);
all.add(buttonJP);
JPanel newall=new JPanel();
newall.add(all, BorderLayout.NORTH);
newall.setBorder(BorderFactory.createTitledBorder("工具栏"));
this.setTitle("截图小工具");
this.getContentPane().add(d,BorderLayout.CENTER);
this.getContentPane().add(newall,BorderLayout.NORTH);
this.setSize(400,330);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setAlwaysOnTop(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void updates(){
this.setVisible(true);
if(get!=null){
//如果索引是0,则表示一张图片都没有被加入过,
//则要清除当前的东西
if(index==0){
d.removeAll();
d.add(jtp,BorderLayout.CENTER);
}else{//否则的话,直接添加面板就可以了
//就什么都不用做了
}
PicPanel pic=new PicPanel(get);
jtp.addTab("图片"+(++index),pic);
jtp.setSelectedComponent(pic);
SwingUtilities.updateComponentTreeUI(d);
}
}
private void doStart(){
try{
this.setVisible(false);
Thread.sleep(500); //睡500毫秒是为了让主窗完全不见
Robot ro=new Robot(); // (通过本地操作)控制鼠标、键盘等实际输入源(java.awt)
Toolkit tk=Toolkit.getDefaultToolkit(); // AWT组件的抽象父类(java.awt)
Dimension di=tk.getScreenSize();
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("D:/");
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){
String ns=ext+".jpg";
file=new File(ns);
about="JPG";
} else if(ff instanceof PNGfilter){
String ns=ext+".png";
file=new File(ns);
about="PNG";
}else if(ff instanceof BMPfilter){
String ns=ext+".bmp";
file=new File(ns);
about="BMP";
}else if(ff instanceof GIFfilter){
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;
}
Transferable trans = new Transferable(){ // 内部类
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.imageFlavor };
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return DataFlavor.imageFlavor.equals(flavor);
}
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException, IOException {
if(isDataFlavorSupported(flavor))
return image;
throw new UnsupportedFlavorException(flavor);
}
};
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null);
JOptionPane.showMessageDialog(this,"已复制到系统粘帖板!!");
}catch(Exception e){
e.printStackTrace();
JOptionPane.showMessageDialog(this
,"复制到系统粘帖板出错!!","错误",JOptionPane.ERROR_MESSAGE);
}
}
private void doClose
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
豆包程序员
- 粉丝: 1w+
- 资源: 3939
最新资源
- PFC开关电源仿真与全桥LLC串联谐振电源Simulink模型详解,PFC开关电源仿真与全桥LLC串联谐振模型:Simulink建模及参数计算说明,PFC开关电源仿真 全桥LLC 单相Boost PF
- IEEE 39节点系统中的双馈风机风电场:带有虚拟惯量与综合控制的一次调频技术分析与应用模拟,IEEE 39节点风电一次调频系统:含双馈风机与虚拟惯量、下垂控制及综合惯量控制的时空分布研究,IEEE3
- 双馈永磁同步风电机组并网仿真模型及其短路故障分析:一个可调容量的9MW风电场模拟研究报告,“kw级别双馈永磁风电机组与PMSG并网仿真模型:风电场短路故障分析与多风速模拟研究”,双馈永磁风电机组并网仿
- 小数分频锁相环与环形振荡器结构在smic 28nm工艺下的设计原理及版图详解,小数分频锁相环与环形振荡器结构设计:SMIC 28nm技术下的版图设计与原理解析,小数分频锁相环,环形振荡器结构,smic
- 基于python的区块链简单实现
- 基于VSG控制的MMC变流器模块化研究:电网频率电压模拟下的功率输出与调节策略,基于VSG控制的MMC变流器模块化研究:电网频率电压模拟下的功率输出与调节策略,基于VSG控制(同步发电机控制)的模块化
- 永磁同步电机旋转高频信号注入法:零低速无位置控制的优化仿真研究及其低噪声低损耗优势分析,永磁同步电机旋转高频信号注入法:零低速无位置控制的优化仿真研究及与高频方波信号注入法的对比分析,永磁同步电机旋转
- Simulink光伏并网与同步发电机优化:频率惯量支撑与波形效果卓越,光强、温度及减载率可灵活调整,Simulink光伏并同步发电机频率惯量支撑技术研究:光强、温度与减载率可调的优化波形效果探索,si
- 基于java的区块链简单实现
- **Qt CPP多列时间轴控件:故事大纲展示与自由编辑的强大工具**,QtCPP时间轴控件:多功能时间管理,事件故事线编排的完美工具,Qt CPP实现的多列时间轴控件、可与多段字符串格式自由转、也可手
- 基于DSP28377的三相并网双二阶锁相环(DSOGI-PLL)程序设计方法探讨,基于DSP28377的三相并网双二阶锁相环DSOGI-PLL程序设计解析与实现,基于DSP28377的三相并网双二阶锁
- MATLAB中基于DWA算法的机器人局部避障路径规划过程解析:速度控制优化与仿真实验结果,MATLAB动态窗口算法DWA实现机器人局部避障路径规划的优化与仿真研究:速度控制下的最优路线决策,MATLA
- 电气安装工 中级工.pdf
- 基于dq旋转坐标系的构网变流器功率控制策略:下垂控制实现功率准确跟踪与电压前馈双闭环控制,基于dq坐标系的构网变流器功率控制策略:下垂控制结合PI控制实现精准功率跟踪与电压稳定,构网变流器功率控制控制
- 电气安装工 高级工.pdf
- KR_70_R2100_E_ES 20240417(1).stp
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)