最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java模擬QQ桌面截圖功能實現(xiàn)方法

 更新時間:2015年07月20日 10:19:37   作者:鑒客  
這篇文章主要介紹了Java模擬QQ桌面截圖功能實現(xiàn)方法,涉及java針對鼠標事件及圖片操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了Java模擬QQ桌面截圖功能實現(xiàn)方法。分享給大家供大家參考。具體如下:

QQ的桌面截圖功能非常方便,去年曾用Java模擬過一個,現(xiàn)整理出來。
本方法首先需要抓到屏幕的整個圖象,將圖象顯示在一個JFrame中,再將JFrame全屏顯示,這樣就模擬出了一個桌面,Java也就可以獲得鼠標的作用區(qū)域從而實現(xiàn)桌面中的小范圍截屏。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
/**
 * 用Java模擬出QQ桌面截圖功能
 */
public class Test extends JFrame {
 private static final long serialVersionUID = -267804510087895906L;
 private JButton button = null;
 private JLabel imgLabel = null;
 public Test() {
 button = new JButton("模擬屏幕(點右鍵退出)");
 button.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
  try {
   new ScreenWindow(imgLabel);
  } catch (Exception e1) {
   JOptionPane.showConfirmDialog(null, "出現(xiàn)意外錯誤!", "系統(tǒng)提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);
  }
  }
 });
 JPanel pane = new JPanel();
 pane.setBackground(Color.WHITE);
 imgLabel = new JLabel();
 pane.add(imgLabel);
 JScrollPane spane = new JScrollPane(pane);
 this.getContentPane().add(button, BorderLayout.NORTH);
 this.getContentPane().add(spane);
 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 this.setSize(300, 200);
 this.setLocationRelativeTo(null);
 this.setVisible(true);
 }
 public static void main(String[] args) {
 new Test();
 }
}
class ScreenWindow extends JFrame {
 private static final long serialVersionUID = -3758062802950480258L;
 private boolean isDrag = false;
 private int x = 0;
 private int y = 0;
 private int xEnd = 0;
 private int yEnd = 0;
 public ScreenWindow(final JLabel imgLabel) throws AWTException, InterruptedException {
 Dimension screenDims = Toolkit.getDefaultToolkit().getScreenSize();
 JLabel label = new JLabel(new ImageIcon(ScreenImage.getScreenImage(0, 0, screenDims.width, screenDims.height)));
 label.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
 label.addMouseListener(new MouseAdapter() {
  public void mouseClicked(MouseEvent e) {
  if (e.getButton() == MouseEvent.BUTTON3) {
   dispose();
  }
  }
  public void mousePressed(MouseEvent e) {
  x = e.getX();
  y = e.getY();
  }
  public void mouseReleased(MouseEvent e) {
  if (isDrag) {
   xEnd = e.getX();
   yEnd = e.getY();
   if(x > xEnd){
   int temp = x;
   x = xEnd;
   xEnd = temp;
   }
   if(y > yEnd){
   int temp = y;
   y = yEnd;
   yEnd = temp;
   }
   try {
   imgLabel.setIcon(new ImageIcon(ScreenImage.getScreenImage(x, y, xEnd - x, yEnd - y)));
   } catch (Exception ex) {
   JOptionPane.showConfirmDialog(null, "出現(xiàn)意外錯誤!", "系統(tǒng)提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);
   }
   dispose();
  }
  }
 });
 label.addMouseMotionListener(new MouseMotionListener() {
  public void mouseDragged(MouseEvent e) {
  if(!isDrag)
   isDrag = true;
  }
  public void mouseMoved(MouseEvent e) {
  /** 拖動過程的虛線選取框需自己實現(xiàn) */
  }
 });
 this.setUndecorated(true);
 this.getContentPane().add(label);
 this.setSize(screenDims.width, screenDims.height);
 this.setVisible(true);
 this.setExtendedState(JFrame.MAXIMIZED_BOTH);
 }
}
class ScreenImage {
 public static Image getScreenImage(int x, int y, int w, int h) throws AWTException, InterruptedException {
 Robot robot = new Robot();
 Image screen = robot.createScreenCapture(new Rectangle(x, y, w, h)).getScaledInstance(w, h, Image.SCALE_SMOOTH);
 MediaTracker tracker = new MediaTracker(new Label());
 tracker.addImage(screen, 1);
 tracker.waitForID(0);
 return screen;
 }
}

希望本文所述對大家的java程序設計有所幫助。

相關文章

  • java利用jacob將word轉pdf

    java利用jacob將word轉pdf

    這篇文章主要為大家詳細介紹了java利用jacob將word轉pdf,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • spring cloud gateway網(wǎng)關路由分配代碼實例解析

    spring cloud gateway網(wǎng)關路由分配代碼實例解析

    這篇文章主要介紹了spring cloud gateway網(wǎng)關路由分配代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Spring?Boot?集成?MyBatis?全面講解(最新推薦)

    Spring?Boot?集成?MyBatis?全面講解(最新推薦)

    MyBatis 是一款優(yōu)秀的持久層框架,與 Spring Boot 集成后可以大大簡化開發(fā)流程,本文將全面講解如何在 Spring Boot 中集成 MyBatis,包括環(huán)境配置、基礎操作、高級功能和最佳實踐,需要的朋友可以參考下
    2024-12-12
  • java list常用方法總結

    java list常用方法總結

    這篇文章主要介紹了java list常用方法總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • 一文教會你如何搭建vue+springboot項目

    一文教會你如何搭建vue+springboot項目

    最近在搗鼓?SpringBoot?與?Vue?整合的項目,所以下面這篇文章主要給大家介紹了關于如何通過一篇文章教會你搭建vue+springboot項目,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • 用Java將字符串的首字母轉換大小寫

    用Java將字符串的首字母轉換大小寫

    在項目開發(fā)的時候會需要統(tǒng)一字符串的格式,比如首字母要求統(tǒng)一大寫或小寫,那用Java如何實現(xiàn)這一功能?下面一起來學習學習。
    2016-08-08
  • springboot 中整合mybatis多數(shù)據(jù)源不使用JPA

    springboot 中整合mybatis多數(shù)據(jù)源不使用JPA

    這篇文章主要介紹了springboot 中整合mybatis多數(shù)據(jù)源不使用JPA,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Kryo序列化及反序列化用法示例

    Kryo序列化及反序列化用法示例

    這篇文章主要介紹了Kryo序列化及反序列化用法示例,小編覺得挺不錯的,這里分享給大家,需要的朋友可以參考下。
    2017-10-10
  • Java基于jeeplus vue實現(xiàn)簡單工作流過程圖解

    Java基于jeeplus vue實現(xiàn)簡單工作流過程圖解

    這篇文章主要介紹了Java基于jeeplus vue實現(xiàn)簡單工作流過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Spring容器-BeanFactory和ApplicationContext使用詳解

    Spring容器-BeanFactory和ApplicationContext使用詳解

    這篇文章主要為大家介紹了Spring容器-BeanFactory和ApplicationContext的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04

最新評論

上杭县| 托克逊县| 永吉县| 咸阳市| 岢岚县| 石景山区| 永年县| 子洲县| 洪雅县| 富顺县| 沅陵县| 邢台县| 平邑县| 稷山县| 湘乡市| 兴城市| 桂林市| 定州市| 石首市| 女性| 韶关市| 巴马| 莒南县| 桐梓县| 专栏| 姜堰市| 色达县| 成都市| 连南| 麻城市| 始兴县| 兴业县| 道孚县| 兴宁市| 孝感市| 平度市| 大足县| 南江县| 张家界市| 高唐县| 长丰县|