/**

* 文件名:Magnifier.java

* OS:GNU/Linux Ubuntu 6.10

* IDE:eclipse 3.2

* JDK 版本: 1.6.0

* 版本:0.1

* 作者:88250

* 邮箱&MSN:DL88250@gmail.com

* QQ: 845765

*/

import

java.awt.

*

;

import

java.awt.event.

*

;

import

javax.swing.

*

;

public

class

Magnifier

extends

JFrame

{

/**

* 主容器

*/

private

Container container

=

getContentPane();

/**

* 放大镜x坐标

* 计算方式:setCoordinateX = absoluteCoordinateX

* - relativeCoordinateXWhenMousePressed

*/

private

int

setCoordinateX;

/**

* 放大镜y坐标

* 计算方式:setCoordinateY = absoluteCoordinateY

* - relativeCoordinateYWhenMousePressed

*/

private

int

setCoordinateY;

/**

* 鼠标绝对x坐标

*/

private

int

absoluteCoordinateX;

/**

* 鼠标绝对y坐标

*/

private

int

absoluteCoordinateY;

/**

* 鼠标按下时的相对x坐标

*/

private

int

relativeCoordinateXWhenMousePressed;

/**

* 鼠标按下时的相对y坐标

*/

private

int

relativeCoordinateYWhenMousePressed;

/**

* 标记鼠标是否按下。如果按下则为true,否则为false

*/

private

boolean

mousePressedNow;

/**

* 放大镜尺寸

*/

private

int

magnifierSize

=

100

;

/**

* 放大镜内容面板

*/

private

MagnifierPanel magnifierPanel

=

new

MagnifierPanel(magnifierSize);

/**

* 构造函数,创建一个放大镜窗体

*/

public

Magnifier()

{

setUndecorated(

true

);

//

窗体边缘

setResizable(

false

);

container.add(magnifierPanel);

addMouseListener(

new

MouseFunctions());

addMouseMotionListener(

new

MouseMotionFunctions());

updateSize(magnifierSize);

this

.setVisible(

true

);

}

/**

* 程序入口点

*

*

@param

arg

*                启动参数,这里为空

*/

public

static

void

main(String arg[])

{

Magnifier magnifier

=

new

Magnifier();

magnifier.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

/**

* 更新窗体

*

*

@param

magnifierSize

*                放大镜尺寸

*/

public

void

updateSize(

int

magnifierSize)

{

magnifierPanel.setMagnifierSize(magnifierSize

+

100

);

setSize(magnifierSize

+

100

, magnifierSize

+

100

);

validate();

//

更新所有子控件

}

private

class

MouseFunctions

extends

MouseAdapter

{

public

void

mousePressed(MouseEvent e)

{

if

(e.getClickCount()

==

1

)

{

//

如果鼠标左键点了一下,说明按住了窗体

mousePressedNow

=

true

;

relativeCoordinateXWhenMousePressed

=

e.getX();

relativeCoordinateYWhenMousePressed

=

e.getY();

}

}

public

void

mouseReleased(MouseEvent e)

{

mousePressedNow

=

false

;

}

}

private

class

MouseMotionFunctions

extends

MouseMotionAdapter

{

public

void

mouseDragged(MouseEvent e)

{

if

(mousePressedNow

==

true

)

{

//

如果此时鼠标按下了,说明在拖拽窗体

absoluteCoordinateX

=

Magnifier.

this

.getLocationOnScreen().x

+

e.getX();

absoluteCoordinateY

=

Magnifier.

this

.getLocationOnScreen().y

+

e.getY();

setCoordinateX

=

absoluteCoordinateX

-

relativeCoordinateXWhenMousePressed;

setCoordinateY

=

absoluteCoordinateY

-

relativeCoordinateYWhenMousePressed;

magnifierPanel.setMagnifierLocation(setCoordinateX,

setCoordinateY);

setLocation(setCoordinateX, setCoordinateY);

}

}

}

}

class

MagnifierPanel

extends

JPanel

{

private

Image screenImage;

/**

* 放大镜的尺寸

*/

private

int

magnifierSize;

private

int

locationX;

private

int

locationY;

private

Robot robot;

/**

* 带参数的构造函数

*

@param

magnifierSize

*         放大尺寸

*/

public

MagnifierPanel(

int

magnifierSize)

{

try

{

robot

=

new

Robot();

}

catch

(AWTException e)

{

}

//

截屏幕

screenImage

=

robot.createScreenCapture(

new

Rectangle(

0

,

0

, Toolkit

.getDefaultToolkit().getScreenSize().width, Toolkit

.getDefaultToolkit().getScreenSize().height));

this

.magnifierSize

=

magnifierSize;

}

/**

* 设置放大镜的位置

*

@param

locationX

*         x坐标

*

@param

locationY

*         y坐标

*/

public

void

setMagnifierLocation(

int

locationX,

int

locationY)

{

this

.locationX

=

locationX;

this

.locationY

=

locationY;

repaint();

//

注意重画控件

}

/**

* 设置放大镜的尺寸

*

@param

magnifierSize

*         放大镜尺寸

*/

public

void

setMagnifierSize(

int

magnifierSize)

{

this

.magnifierSize

=

magnifierSize;

}

public

void

paintComponent(Graphics g)

{

super

.paintComponent((Graphics2D) g);

//

关键处理代码

g.drawImage(

screenImage,

//

要画的图片

0

,

//

目标矩形的第一个角的x坐标

0

,

//

目标矩形的第一个角的y坐标

magnifierSize,

//

目标矩形的第二个角的x坐标

magnifierSize,

//

目标矩形的第二个角的y坐标

locationX

+

(magnifierSize

/

4

),

//

源矩形的第一个角的x坐标

locationY

+

(magnifierSize

/

4

),

//

源矩形的第一个角的y坐标

locationX

+

(magnifierSize

/

4

*

3

),

//

源矩形的第二个角的x坐标

locationY

+

(magnifierSize

/

4

*

3

),

//

源矩形的第二个角的y坐标

this

);

}

}

java放大镜_Java写的屏幕放大镜相关推荐

  1. 迷宫java代码_java写的迷宫代码

    迷宫代码: 截图如下: packagecom.zxl.maze;/** 抽象类表示选择不同的算法*/ public abstract classAbstractMap {/** 得到数据*/ publ ...

  2. java 空语句_Java空语句怎么写才正确?这样的Java基础知识才是你需要的

    [摘要]在很多的高级语言中,有专门的赋值语句,我希望大家一定要了解JavaJava空语句怎么写才正确?这样的Java基础知识才是你需要的,今天小编就带大家看看Java空语句怎么写才正确?这样的Java ...

  3. java程序怎么写_java程序怎么写

    java程序怎么写? 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 推荐教程:<java学习> 对象: ...

  4. java方法怎么写_java方法定义格式详解,java方法怎么写?

    对于java方法你了解多少呢?你知道java方法应该如何写吗?下面要给大家介绍的就是和java方法相关的内容,一起来了解一下这个概念吧. 在学习运算符的时候,都为每个运算符单独的创建一个新的类和mai ...

  5. java过滤器怎么写_java过滤器怎么写

    1.java过滤器中实现Filter的类怎么写 web.xml配置文件 SessionFilter com.qhit.system.tools.SessionFilter SessionFilter ...

  6. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  7. 女朋友生日java程序_★★女朋友要过生日了!我想用java为她写一个程序,一举两得啊! 希望大家多提建议啊!谢谢!!!...

    女朋友要过生日了,我想用java为她写一个程序,所以想请教大家,  希望大家给我出出点子, 同时手头有3D  等漂亮图形的java程序或其他一些特效的文字,图形java程序,都希望大家多提供,  多帮 ...

  8. html分辨率与放大倍数,放大镜倍数 你怎样知道放大镜的放大倍数

    正常的放大镜的倍数是多少? 方法一:将放大镜放在有格子的纸上,数出放大镜范围内的格数A:再将放大镜提高,直至格子放大到最大.最清晰,数出放大镜范围内的格数B:A除以B就是放大镜放大的倍数. 方法二:用 ...

  9. java 手写签名,signature java html5+ 手写签名 源码 Develop 238万源代码下载- www.pudn.com...

    文件名称: signature下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 491 KB 上传时间: 2013-08-03 下载次数: 17 提 供 者: 孙晨 ...

  10. 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)

    黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...

最新文章

  1. 源文件封装为IP的步骤
  2. java 强制垃圾回收_Java垃圾回收机制
  3. 有两个python怎么停用其中一_python3.X 复学(2)-----开始了就不要停止
  4. 小鹏汽车提交赴美IPO:上半年营收1.42亿美元 何小鹏持股31.6%为最大股东
  5. Ex 6_23 一个生产系统共包含n个顺序执行的阶段..._第七次作业
  6. js 判断 是否在当前页面 当前页面是否在前端
  7. mysql 字节 字符_字符与字节 | 字痕随行
  8. 十五天精通WCF——第四天 你一定要明白的通信单元Message
  9. Oracle 分区表中索引失效
  10. 统一认证 ldap mysql_ZABBIX 对接 LDAP实现用户登陆统一认证
  11. 在 Kotlin 序列化中使用 DataStore
  12. 解决Microsoft Teredo Tunneling Adapter 這個裝置無法啟動。 (代碼 10)
  13. Android TabLayout基本使用及完美调整指示器位置的技巧
  14. multisim二极管_变容二极管应用的Multisim仿真及分析
  15. Simscape Multiby学习笔记5——在Multibody中建立控制器-驱动力-传感器
  16. 阿里研究院启动2018年度淘宝村辅助认证活动
  17. 2021年R2移动式压力容器充装考试题及R2移动式压力容器充装考试试卷
  18. 请听一个故事------美国是一个愚蠢而落后的国度--大家千万别去
  19. 仿抖音短视频APP双端系统源码+带教程/PHP的
  20. uni-app中@tap和@click的区别

热门文章

  1. ie浏览器打不开oracle,小编教你解决ie浏览器打不开的方法
  2. Android项目实战系列—基于博学谷(一)项目综述
  3. Python实现BT种子转化为磁力链接
  4. CSS简易导航列表样式
  5. 海康威视云台相机4200客户端调试记录
  6. OFD电子文档阅读器功能说明
  7. 【渝粤教育】电大中专电商运营实操 (14)作业 题库
  8. python编程语言在线编译手机_groovy在线运行,groovy在线编译,支持手机在线编程写代码 - Groovy教程...
  9. html记笔记模板,使用html和css实现康奈尔笔记的模板
  10. MySQL查询所有叶子节点