文档库 最新最全的文档下载
当前位置:文档库 › java放大镜源代码

java放大镜源代码


/*用java语言编写,在JCeator中运行成功
*这是一个放大镜的程序,运行后拖动屏幕左上角的方框,即可以看到放大效果
*放大镜的原理:光的折射*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Magnifier extends JFrame {

private Container container = getContentPane();


private int setCoordinateX;

private int setCoordinateY;

private int absoluteCoordinateX;

private int absoluteCoordinateY;

private int relativeCoordinateXWhenMousePressed;


private int relativeCoordinateYWhenMousePressed;

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


public static void main(String arg[]) {
Magnifier magnifier = new Magnifier();
magnifier.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}


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;


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;
}

public void setMagnifierLocation(int locationX, int locationY) {
this.locationX = locationX;
this.locationY = locationY;
repaint();
}


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

相关文档
相关文档 最新文档