java放大镜_Java写的屏幕放大镜
/**
* 文件名: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写的屏幕放大镜相关推荐
- 迷宫java代码_java写的迷宫代码
迷宫代码: 截图如下: packagecom.zxl.maze;/** 抽象类表示选择不同的算法*/ public abstract classAbstractMap {/** 得到数据*/ publ ...
- java 空语句_Java空语句怎么写才正确?这样的Java基础知识才是你需要的
[摘要]在很多的高级语言中,有专门的赋值语句,我希望大家一定要了解JavaJava空语句怎么写才正确?这样的Java基础知识才是你需要的,今天小编就带大家看看Java空语句怎么写才正确?这样的Java ...
- java程序怎么写_java程序怎么写
java程序怎么写? 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 推荐教程:<java学习> 对象: ...
- java方法怎么写_java方法定义格式详解,java方法怎么写?
对于java方法你了解多少呢?你知道java方法应该如何写吗?下面要给大家介绍的就是和java方法相关的内容,一起来了解一下这个概念吧. 在学习运算符的时候,都为每个运算符单独的创建一个新的类和mai ...
- java过滤器怎么写_java过滤器怎么写
1.java过滤器中实现Filter的类怎么写 web.xml配置文件 SessionFilter com.qhit.system.tools.SessionFilter SessionFilter ...
- 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇
马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...
- 女朋友生日java程序_★★女朋友要过生日了!我想用java为她写一个程序,一举两得啊! 希望大家多提建议啊!谢谢!!!...
女朋友要过生日了,我想用java为她写一个程序,所以想请教大家, 希望大家给我出出点子, 同时手头有3D 等漂亮图形的java程序或其他一些特效的文字,图形java程序,都希望大家多提供, 多帮 ...
- html分辨率与放大倍数,放大镜倍数 你怎样知道放大镜的放大倍数
正常的放大镜的倍数是多少? 方法一:将放大镜放在有格子的纸上,数出放大镜范围内的格数A:再将放大镜提高,直至格子放大到最大.最清晰,数出放大镜范围内的格数B:A除以B就是放大镜放大的倍数. 方法二:用 ...
- java 手写签名,signature java html5+ 手写签名 源码 Develop 238万源代码下载- www.pudn.com...
文件名称: signature下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 491 KB 上传时间: 2013-08-03 下载次数: 17 提 供 者: 孙晨 ...
- 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)
黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...
最新文章
- 源文件封装为IP的步骤
- java 强制垃圾回收_Java垃圾回收机制
- 有两个python怎么停用其中一_python3.X 复学(2)-----开始了就不要停止
- 小鹏汽车提交赴美IPO:上半年营收1.42亿美元 何小鹏持股31.6%为最大股东
- Ex 6_23 一个生产系统共包含n个顺序执行的阶段..._第七次作业
- js 判断 是否在当前页面 当前页面是否在前端
- mysql 字节 字符_字符与字节 | 字痕随行
- 十五天精通WCF——第四天 你一定要明白的通信单元Message
- Oracle 分区表中索引失效
- 统一认证 ldap mysql_ZABBIX 对接 LDAP实现用户登陆统一认证
- 在 Kotlin 序列化中使用 DataStore
- 解决Microsoft Teredo Tunneling Adapter 這個裝置無法啟動。 (代碼 10)
- Android TabLayout基本使用及完美调整指示器位置的技巧
- multisim二极管_变容二极管应用的Multisim仿真及分析
- Simscape Multiby学习笔记5——在Multibody中建立控制器-驱动力-传感器
- 阿里研究院启动2018年度淘宝村辅助认证活动
- 2021年R2移动式压力容器充装考试题及R2移动式压力容器充装考试试卷
- 请听一个故事------美国是一个愚蠢而落后的国度--大家千万别去
- 仿抖音短视频APP双端系统源码+带教程/PHP的
- uni-app中@tap和@click的区别
热门文章
- ie浏览器打不开oracle,小编教你解决ie浏览器打不开的方法
- Android项目实战系列—基于博学谷(一)项目综述
- Python实现BT种子转化为磁力链接
- CSS简易导航列表样式
- 海康威视云台相机4200客户端调试记录
- OFD电子文档阅读器功能说明
- 【渝粤教育】电大中专电商运营实操 (14)作业 题库
- python编程语言在线编译手机_groovy在线运行,groovy在线编译,支持手机在线编程写代码 - Groovy教程...
- html记笔记模板,使用html和css实现康奈尔笔记的模板
- MySQL查询所有叶子节点