/*** 文件名: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);
}
}