Java 制作的一个放大镜程序

package com.mocake.jna;

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

 

使用 JavaScript 和 CSS 的简单图像放大镜 图像放大镜在很多网站中都扮演着重要的角色,大多数开发人员使用 jquery 来创建图像放大镜。在本教程中,我将向大家展示如何使用 HTML、CSS 和 JavaScript 制作一个简单的图像放大镜。 阅读详情

相关推荐

javaFx实现放大镜效果——圆形、矩形、三角形放大镜,拖动调整放大镜大小,设置放大倍数

javaFx实现放大镜效果——圆形、矩形、三角形放大镜,拖动调整放大镜大小,设置放大倍数

c1007857613的专栏 3641

Java:实现屏幕放大镜(附带源码)

Java:实现屏幕放大镜(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 2048

Java GUI放大镜效果实现与源文件

本文还有配套的精品资源,点击获取 简介:Java图形用户界面编程中实现放大镜效果是一个常见的练习。本项目涉及使用Swing或JavaFX库,通过自定义组件、鼠标事件处理和图像处理技术,实现图像的局部放大视图。开发者将通过创建自定义组件并重写 paintComponent() 方法来绘制原始图像和放大后的图像,使用 MouseListener 和 ...

weixin_30598047的博客 1094

用Javascript实现放大镜效果

放大镜效果 学习Javascript已经有一个月,想说一下大致感受,刚开始学习时相较于第一个月的静态页面布局,第二月的知识点明显相对少一些,但是难度上是更大了,主要是思路,这一个月四周分别,从刚开始的这么语言被创造的缘由,基本知识到现在的面向对象的编程,这段过程对于这个从没接触过前端的方面知识的我来说,过程并不是那么容易,可能刚开始第一周最基本的变量,JS的数据类型,分支结构循环结构等的基础知...

weixin_42112381的博客 545

Java实现的放大镜效果附有源文件

Java实现的放大镜效果附有源文件,编译环境最近出了问题,因此没有测试,也没有抓到图,希望各位自行测试一下。

java做的放大镜

用java做的放大镜,有兴趣的同学可以看看,不过代码注释比较少

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.swi...

weixin_39567870的博客 335

放大镜代码编写

前台JS效前台JS效果展示放大镜前台JS效果展示放大镜前台JS效果展示放大镜前台JS效果展示放大镜果展示放大镜

Android 放大镜

之前做过iOS下的放大镜功能,这个再来一个Android版的。 ShaderView.java package com.pactera.magnifierdemo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import an

杜甲同学的专栏 2727

java图片放大镜源文件

图片放大镜源文件Magnifier.java

java编的桌面放大镜

用java编的一个桌面放大镜程序,能放大桌面上的如表文字。

java放大镜_Java写的屏幕放大镜 | 学步园

/***文件名:Magnifier.java*OS:GNU/LinuxUbuntu6.10*IDE:eclipse3.2*JDK版本:1.6.0*版本:0.1*作者:88250*邮箱&MSN:DL88250@gmail.com*QQ:845765*/importjava.awt.*;importjava.awt.event.*;importjavax.swing...

weixin_30140399的博客 336

java放大镜程序代码

简单的放大镜实现.需要用到3个包,一个awt,一个swing,一个awt.event,两个类就能实现放大镜功能.

怎样用java做出特效_[Java教程]使用jQuery制作的一个放大镜特效

[Java教程]使用jQuery制作的一个放大镜特效0 2016-03-19 10:00:07先看效果:方图(w=h)竖图(h>w)横图(w>h)使用说明:css:顶部引入放大镜样式文件magnifier.css,或将magnifier.css中的内容粘贴到自己的样式文件中亦可,样式中的属性值可酌情修改,但一些必须的属性例如position,display等最好不要删改。...

weixin_35876299的博客 173

实现jquery放大镜的两种方法

本篇文章给大家详细分析了用jquery实现放大镜效果的方法,以及代码分享,有兴趣的学习下。

CMOS的宽/长比、传输门与三态门、锁存器与触发器、简单版图、竞争与冒险

目录 1.CMOS的宽长比 2.传输门与三态门 传输门 三态门 3.锁存器与触发器 3.1RS锁存器[3] 3.2D锁存器 3.3D触发器 4.简单CMOS器件的版图 5.竞争与冒险 1.CMOS的宽长比 关于COMS原理及结构图可以参考[1]COMS原理及门电路设计. 栅在源漏方向的长度称作栅的长L,垂直方向称为栅的宽W,如图1中NMOS的版图。 图1 以MOS管...

king阿金 1万+

放大镜用java怎么写_[Java教程]用js实现放大镜的效果

[Java教程]用js实现放大镜的效果0 2016-05-22 22:00:06第一次发博客,还有点小激动,本人现在正在天津上大学,希望以后从事前端这一行业,学习的时间不长,写博客为了记录自己的学习过程和收获,当然也算是巩固。可能写的东西不会像大牛那样高大上,只是一些基本的内容,当然我也会收藏一些我认为好的,不错的文章(其实最主要是我能看懂。。。。)。我相信以后自己也能够写出高大上的...

weixin_36401868的博客 408

CAT24C16 EEPROM的I²C页写与页读底层实现

I²C是一种广泛应用于嵌入式系统的双线同步串行通信协议,其核心在于严格的时序控制、地址寻址机制与主从应答逻辑。理解I²C总线物理层(上拉电阻、SCL/SDA电气特性)、协议层(START/STOP、ACK/NACK、7位地址格式)及外设寄存器操作(如SR1状态标志、CCR时钟分频),是实现可靠通信的基础。在实际工程中,EEPROM类器件(如CAT24C16)因其非易失性、页缓冲区结构和写保护(WP)功能,成为数据持久化关键载体;其16字节页写约束、内部写周期(5–10ms)与地址指针自动递增等特性,直接决定

weixin_42591413的博客 388

图片放大镜

1、结构布局HTML代码 <div class="leftcon" id="left"> <img src="~/Content/images/风景-1.jpg" /> <div class="slide_box" id="box"></div> </div> <div class="rightcon" id="ri...

weixin_44540436的博客 3686

五、2K0300 久久派开发板的GPIO控制与Shell脚本自动化实战

本文详细介绍了基于龙芯2K0300处理器的久久派开发板的GPIO控制方法,通过sysfs文件系统实现LED控制和传感器读取。重点讲解了Shell脚本自动化实战,包括LED闪烁、流水灯效果和传感器数据采集,为物联网项目开发提供完整解决方案。

silver的专栏 687

【漏洞复现】7-Zip目录穿越漏洞(CVE-2025-11001)

摘要:CVE-2025-11001是7-Zip(v21.02-v24.09)Windows版处理ZIP包符号链接时的高危漏洞,攻击者可构造恶意ZIP文件实现目录穿越和任意文件写入。漏洞源于路径检查缺陷,当用户解压含特殊符号链接的压缩包时,可能将文件写入系统目录。复现利用GitHub公开的Python脚本(https://github.com/pacbypass/CVE-2025-11001)可生成攻击包,需注意该漏洞仅影响Windows且需要用户交互。

LongL_GuYu的博客 1608
上一篇: JOption 的一些事件监听
下一篇: 一个Java3D 应用程序
CONLONG
博客等级 码龄20年 35粉丝 64原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值