package com.version2; /** * @author xu * @create 2019-07-12 13:05 */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Fang extends JFrame { //private Container container = getContentPane(); /** * 放大镜x坐标 * 计算方式:setX = absolute - relativeX */ private int setX; /** * 放大镜y坐标 * 计算方式:setY = absoluteY - relativeY */ private int setY; //鼠标绝对x坐标(相对(0,0)坐标) private int absoluteX; //鼠标绝对y坐标 private int absoluteY; //鼠标按下时的相对x坐标(相对组件左上角坐标) private int relativeX; //鼠标按下时的相对y坐标 private int relativeY; //标记鼠标是否按下。如果按下则为true,否则为false private boolean mousePressed; //放大镜尺寸 private int FangSize = 0; //放大镜内容面板 private FangJPanel FangJPanel = new FangJPanel(FangSize); public Fang() { setUndecorated(true); // 窗体无边缘 setResizable(false); //my-不可调整大小 this.add(FangJPanel); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.addMouseListener(new MouseFunctions()); this.addMouseMotionListener(new MouseMotionFunctions()); updateSize(FangSize); this.setVisible(true); } /** * 更新窗体 * @param FangSize 放大镜尺寸 */ public void updateSize(int FangSize) { FangJPanel.setFangSize(FangSize + 100); this.setBounds(0,0,FangSize+100,FangSize+100); validate(); // 更新所有子控件 } //鼠标设配器 private class MouseFunctions extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { if (e.getClickCount() == 1) {// 如果鼠标左键点了一下,说明按住了窗体 mousePressed = true; relativeX = e.getX(); relativeY = e.getY(); /*my- 这2个位置指的是相对组件左上角那个坐标的位置 getX():返回事件相对于源组件的水平x位置。 getY():返回事件相对于源组件的垂直y位置。 * */ //System.out.println("x:"+relativeX+"\ny:"+relativeY); } } @Override public void mouseReleased(MouseEvent e) { //my-鼠标释放,置为false mousePressed = false; } } //MouseMotionAdapter:鼠标运动适配器 private class MouseMotionFunctions extends MouseMotionAdapter { /* my- * mouseDragged:鼠标拖动事件 * java.awt.Component * public Point getLocationOnScreen() :以指定组件左上角的点的形式获取此组件的位置。 * 返回值:Point :代表组件左上角的点的位置。 */ @Override public void mouseDragged(MouseEvent e) { if (mousePressed == true) { /* * 如果此时鼠标按下了,说明在拖拽窗体 * -my- * my-container.getLocationOnScreen().x * absoluteX:此时鼠标的x坐标 * absoluteY:此时鼠标的Y坐标 */ absoluteX = Fang.this.getLocationOnScreen().x + e.getX(); absoluteY = Fang.this.getLocationOnScreen().y + e.getY(); //System.out.println(e.getX()+"=="+e.getY()); //System.out.println(absoluteX+"::"+absoluteY+" "+relativeX+"::"+relativeY); //my-设置放大镜的x,y坐标 setX = absoluteX - relativeX; setY = absoluteY - relativeY; //-my-左上角的那个位置 FangJPanel.setFangLocation(setX, setY); setLocation(setX, setY); } } } } class FangJPanel extends JPanel { private Image screenImage; /** * 放大镜的尺寸 */ private int FangSize; private int locationX; private int locationY; private Robot robot; /** * 带参数的构造函数 * @param FangSize * 放大尺寸 */ public FangJPanel(int FangSize) { this.FangSize = FangSize; try { robot = new Robot(); } catch (AWTException e) { } // 截屏幕 my-仅当前屏幕,切换其他无效-原因:只截图了一次 //my-Rectangle:长方形 screenImage = robot.createScreenCapture(new Rectangle(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height)); //forWindows /*screenImage = robot.createScreenCapture(new Rectangle(0, 0, (int)(Toolkit.getDefaultToolkit().getScreenSize().width*1.5), (int)(Toolkit.getDefaultToolkit().getScreenSize().height*1.5) ));*/ } /** * 设置放大镜的位置 * @param locationX * x坐标 * @param locationY * y坐标 */ public void setFangLocation(int locationX, int locationY) { this.locationX = locationX; this.locationY = locationY; repaint(); // 注意重画控件 } /** * 设置放大镜的尺寸 * @param FangSize * 放大镜尺寸 */ public void setFangSize(int FangSize) { this.FangSize = FangSize; } @Override public void paintComponent(Graphics g) { super.paintComponent((Graphics2D) g); // 关键处理代码 /*// 要画的图片 // 目标矩形的第一个角的x坐标 // 目标矩形的第一个角的y坐标 // 目标矩形的第二个角的x坐标 // 目标矩形的第二个角的y坐标 * */ /*g.drawImage(screenImage, 0, 0, FangSize, FangSize, locationX + (FangSize / 8 * 3), // 源矩形的第一个角的x坐标 locationY + (FangSize / 8 * 3), // 源矩形的第一个角的y坐标 locationX + (FangSize / 8 * 5), // 源矩形的第二个角的x坐标 locationY + (FangSize / 8 * 5), // 源矩形的第二个角的y坐标 this);*/ g.drawImage(screenImage, 0, 0, FangSize, FangSize, locationX + (FangSize / 4), locationY + (FangSize / 4), locationX + (FangSize / 4 * 3), locationY + (FangSize / 4 * 3), this); //forWindows /*g.drawImage(screenImage, 0, 0, (int)(FangSize*1.5), (int)(FangSize*1.5), (int)((locationX + (FangSize / 4))*1.5), (int)((locationY + (FangSize / 4))*1.5), (int)((locationX + (FangSize / 4 * 3))*1.5), (int)((locationY + (FangSize / 4 * 3))*1.5), this);*/ } public static void main(String arg[]) { Fang Fang = new Fang(); } }
最近下载更多
CxlyboSoft LV6
2020年2月16日
moyec50 LV1
2019年7月30日
hsl2019 LV3
2019年7月25日
旧梦圆 LV1
2019年7月24日
Demons_Robin LV7
2019年7月23日
谭鬼鬼 LV48
2019年7月21日
最代码官方 LV168
2019年7月15日
最近浏览更多
dearxo2014 LV1
11月9日
jkjfdgbkl LV2
2023年11月2日
微信网友_6619529767260160
2023年8月24日
暂无贡献等级
猪皮怪
2022年6月12日
暂无贡献等级
wubinbin LV11
2022年2月13日
shisun LV3
2021年7月5日
大连有个马猴 LV4
2020年12月19日
jpfjpfjpf LV1
2020年12月12日
段朝洪 LV15
2020年11月21日
jeed141305 LV1
2020年7月4日