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*/importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassMagnifierextendsJFrame

{/*** 主容器*/privateContainer container=getContentPane();/*** 放大镜x坐标

* 计算方式:setCoordinateX = absoluteCoordinateX

* - relativeCoordinateXWhenMousePressed*/privateintsetCoordinateX;/*** 放大镜y坐标

* 计算方式:setCoordinateY = absoluteCoordinateY

* - relativeCoordinateYWhenMousePressed*/privateintsetCoordinateY;/*** 鼠标绝对x坐标*/privateintabsoluteCoordinateX;/*** 鼠标绝对y坐标*/privateintabsoluteCoordinateY;/*** 鼠标按下时的相对x坐标*/privateintrelativeCoordinateXWhenMousePressed;/*** 鼠标按下时的相对y坐标*/privateintrelativeCoordinateYWhenMousePressed;/*** 标记鼠标是否按下。如果按下则为true,否则为false*/privatebooleanmousePressedNow;/*** 放大镜尺寸*/privateintmagnifierSize=100;/*** 放大镜内容面板*/privateMagnifierPanel magnifierPanel=newMagnifierPanel(magnifierSize);/*** 构造函数,创建一个放大镜窗体*/publicMagnifier()

{

setUndecorated(true);//窗体边缘setResizable(false);

container.add(magnifierPanel);

addMouseListener(newMouseFunctions());

addMouseMotionListener(newMouseMotionFunctions());

updateSize(magnifierSize);this.setVisible(true);

}/*** 程序入口点

*

*@paramarg

*                启动参数,这里为空*/publicstaticvoidmain(String arg[])

{

Magnifier magnifier=newMagnifier();

magnifier.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}/*** 更新窗体

*

*@parammagnifierSize

*                放大镜尺寸*/publicvoidupdateSize(intmagnifierSize)

{

magnifierPanel.setMagnifierSize(magnifierSize+100);

setSize(magnifierSize+100, magnifierSize+100);

validate();//更新所有子控件}privateclassMouseFunctionsextendsMouseAdapter

{publicvoidmousePressed(MouseEvent e)

{if(e.getClickCount()==1)

{//如果鼠标左键点了一下,说明按住了窗体mousePressedNow=true;

relativeCoordinateXWhenMousePressed=e.getX();

relativeCoordinateYWhenMousePressed=e.getY();

}

}publicvoidmouseReleased(MouseEvent e)

{

mousePressedNow=false;

}

}privateclassMouseMotionFunctionsextendsMouseMotionAdapter

{publicvoidmouseDragged(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);

}

}

}

}classMagnifierPanelextendsJPanel

{privateImage screenImage;/*** 放大镜的尺寸*/privateintmagnifierSize;privateintlocationX;privateintlocationY;privateRobot robot;/*** 带参数的构造函数

*@parammagnifierSize

*         放大尺寸*/publicMagnifierPanel(intmagnifierSize)

{try{

robot=newRobot();

}catch(AWTException e)

{

}//截屏幕screenImage=robot.createScreenCapture(newRectangle(0,0, Toolkit

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

.getDefaultToolkit().getScreenSize().height));this.magnifierSize=magnifierSize;

}/*** 设置放大镜的位置

*@paramlocationX

*         x坐标

*@paramlocationY

*         y坐标*/publicvoidsetMagnifierLocation(intlocationX,intlocationY)

{this.locationX=locationX;this.locationY=locationY;

repaint();//注意重画控件}/*** 设置放大镜的尺寸

*@parammagnifierSize

*         放大镜尺寸*/publicvoidsetMagnifierSize(intmagnifierSize)

{this.magnifierSize=magnifierSize;

}publicvoidpaintComponent(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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值