JAVA Swing异或图形模式

用Java Swing打造逻辑门动态演示器:从真值表到GUI动画 逻辑门是数字电路的基本单元,其输入输出关系通常用真值表描述。静态表格难以直观展示动态变化,而可视化教学工具能有效帮助初学者理解。Java Swing作为JDK自带的GUI框架,零依赖且跨平台,特别适合教学环境下的交互式图形程序开发。本文将介绍如何利用Swing的自定义绘制与事件驱动模型,实现一个逻辑门模拟器:通过复选框控制输入,动态绘制门电路符号、连线颜色与信号流动动画,实时反馈输出结果。该项目覆盖了从布尔运算到界面渲染的完整链路,既可作为数字电路辅助教学工具,也是掌握Swing绘图、事件监听、定时刷新的最 阅读详情

JAVA Swing异或图形模式介绍

  Java Graphics 在默认情况下,在绘制直线或填充图形时,新的像素会覆盖旧的像素,因此你会完全忘记以前的图形,这被称作“绘制”模式,可以通过调用setPaintMode()方法来设置。 如果你想要删除图形,那么需要记住覆盖了哪些东西,但是Graphics的绘制方法并没有提供这种功能。但是,如果你转换到异或绘制模式,那么绘制操作就是可逆的,而无需记住被覆盖的图形是什么。为设置该模式,你可以使用Graphics的setXORMode方法,该方法定义如下:

public void setXORMode( Color alt )

  在设置该模式后,你事实上是用一种不同的颜色在进行绘制,该颜色是当前绘制颜色与 setXORMode的参数中设定的替换颜色alt的组合。通常,当你在异或模式中绘制时,可以把当前颜色设置为想要用于绘制的颜色(称为绘制颜色),而把背景色指定为替换颜色。现在,你在背景上绘制时,实际使用的颜色是绘制颜色。其效果仿佛与默认绘制模式无异。但是,如果在具有当前绘制颜色的像素上绘制的话,像素会变成替换颜色,换句话说,就是背景色。如果在其他颜色的像素上绘制的话,该像素又恢复到原来的颜色。我们使用例子来说明一下,其中绘制颜色是黑色而背景色是白色,因此白色用作替换颜色。下表给出了在同一个像素上绘制两次时的效果,其中的当前颜色是黑色,而背景色和替换色都是白色。替换颜色和绘制颜色设置如下:

g.setXORMode( Color.white );

g.setColor( Color.black );

 

  你可以看到,当你在白色背景上用黑色绘制,得到的是黑色。当重复该过程,再次得到白色,因此重现了背景。换句话说,在背景上两次绘制相同的图形,首先会显示该图形,而第二次则删除了该图形。类似的,用黑色在黑色背景上绘制首先产生的是白色(因为替换颜色是白色),然后又回到黑色。同样的,执行相同的操作两次等效于不执行该操作。如果你在其他颜色上绘制,那么第一次操作之后得到的颜色是未定义的,而重复相同的操作,又回到原来的颜色。因此,通过使用异或模式,你可以绘制一个图形,然后再次绘制即可删除它。

  如果你发现这样做难于记忆,我们以一种稍有不同的方法考察一下它。我们把替换颜色称作alt,绘制颜色称作draw。当你设置异或模式时,事实上创建了一个新的画笔,其颜色由下列表达式给定:

alt ^ draw

而你的操作是把该颜色与所绘制像素的颜色异或,换句话说,对于任一像素来说,产生的颜色是:
pixel ^ alt ^ draw

如果重复该操作,产生的颜色是:

pixel ^ ( alt ^ draw ) ^ ( alt ^ draw )

由于任何东西与本身异或的结果都是零,最后两个括号中的项消去了,只剩下pixel,也就是原来的颜色。这就解释了为什么绘制两次会返回到初始状态。如果你在与替换颜色(在我们的例子中是背景色)相同的像素上绘制一次,得到的颜色是:

alt ^ alt ^ draw

这当然是draw,也就是说,在背景上一次绘制得到的像素颜色是绘制颜色。而具有绘制颜色的像素上绘图,产生的颜色是:

draw ^ alt ^ draw

两个draw项再一次抵消,剩下alt,即背景色。最后,在任何其他颜色上绘制,结果是:

other ^ alt ^ draw

它表示的颜色并不是显而易见的,因为使用不同的颜色模型,其结果是不同的。


Java实现Misty1算法文件加密软件:从Feistel网络到Swing桌面应用 分组密码是保障数据机密性的核心加密技术,其原理在于通过固定长度的分组和复杂的轮函数对数据进行多轮混淆与扩散。Feistel网络作为一种经典的分组密码结构,因其加解密过程对称、易于实现的特性,在密码学教学与理解中具有重要价值。在工程实践中,深入实现一个分组密码算法,如Misty1,能深刻理解S盒置换、轮密钥生成、工作模式(如CBC)等底层细节,这对于构建安全可靠的加密工具至关重要。这种从原理到实现的能力,尤其适用于开发需要综合运用密码学核心、Java SE(如Swing GUI、IO流、多线程)的桌面端安全应 阅读详情

相关推荐

基于Misty1算法的Java文件加密工具实现与毕设指南

对称加密是信息安全领域的核心技术之一,它通过同一密钥实现数据的加密与解密,保障了数据传输和存储的机密性。其原理基于复杂的数学变换和密钥调度,在Feistel网络等结构下实现数据混淆与扩散。这项技术的核心价值在于为各类应用提供高效可靠的数据保护机制,广泛应用于文件加密、通信安全、数据库防护等场景。本文聚焦于Misty1这一经典分组密码算法,深入探讨其在Java语言中的工程实现,涵盖位运算处理、CBC模式整合及图形界面开发等关键实践,为密码学学习和毕设开发提供完整参考。

weixin_33834075的博客 378

java setXORMode()理解

Java Graphics分为绘图模式与覆盖模式。 默认是覆盖模式。 我们可以使用g.setXORMode(Color.x)来设置模式为绘图模式。 在绘图模式中,画笔最后呈现的结果是三种颜色异或的结果: 即: g.setBackGround(Color c1); g.setXORMode(Color c2); g.setColor(Color c3); 最终颜色=c1^c2^c3

在路上的学习者 2637

Java实现AES图片加密解密:基于字节流与CBC模式的安全实践

数据加密是信息安全领域的核心技术,其原理是通过特定算法将明文转换为不可读的密文,确保数据在存储和传输过程中的机密性。对称加密算法因其高效性,在文件加密场景中被广泛应用,其中AES(高级加密标准)凭借其安全性与性能的平衡,成为当前的主流选择。在工程实践中,AES常与CBC模式结合,通过引入初始化向量来消除相同明文块加密结果一致的统计特征,从而大幅提升安全性。这种技术方案对于保护本地文件、防止非授权访问具有重要价值,尤其适用于需要保持文件格式(如JPG、PNG)不变的场景。本文将以一个Java实现的图片加密工具

cumo3681的博客 393

Swing 不规则窗体的制作

终极解决之道 经过反复的研究探索,终于获得了一个完美的解决方法:不用shape、不用抓图、不用workaround,真正的、彻底的、完全的、随意的在桌面上任意绘图、涂鸦、撒野,真正的属于程序员的Freedom!下面就来一起揭开这层窗户纸吧!   在程序中依次设置以下几个参数: 设置窗口完全透明:AWTUtilities.setWindowOpaque(frame, false);设置窗

程序员旭阳的专栏 3200

Allegro网表导入报错VOIDs not allowed in parent SHAPE的解决方案

在PCB设计流程中,网表导入是确保电气连接正确传递的关键步骤。其原理是将原理图的逻辑连接关系映射到物理版图的图形数据库中。这一过程的技术价值在于保证设计数据的一致性,避免后续生产中出现电气错误。然而,在Cadence Allegro等EDA工具的实际应用中,数据库内部状态的不一致可能引发操作失败,例如常见的“VOIDs are not allowed in the parent SHAPE”报错。这类问题通常源于多人协作、跨版本操作或频繁编辑后积累的数据结构冗余。针对此场景,核心的解决方法是执行Databa

weixin_30954817的博客 322

【HDR】曝光融合(Exposure Fusion)

在曝光融合(Exposure Fusion)算法问世之前,多曝光序列合成用于显示的HDR需要两个步骤,第一步是将多张不同曝光的低动态范围图像合成为HDR(例如Debevec提出的加权融合方法),通常HDR为12bit或者16bit;第二步是通过tonemapping对高动态范围HDR进行压缩以支持低动态范围显示设备(例如Durand提出的基于双边滤波的tonemapping算法),一般会压缩至8bit。

专注人工智能,主攻CV 1万+

网易笔试题--混合颜色(异或)

你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节

Genge 2768

双臂复合机器人眼在手外标定实战:从原理到D435标定流程详解

本文详细解析了双臂复合机器人中眼在手外标定的核心原理与实战流程。通过阐述坐标系转换与AX=XB方程,重点介绍了使用Intel RealSense D435相机进行标定的完整步骤,包括环境搭建、数据采集、计算与验证,并提供了关键的避坑指南,帮助工程师实现相机与机械臂基座间的精确坐标对齐。

weixin_29100927的博客 449

[转载]JAVA Swing异或图形模式

异或运算。规则是1和0、0和1运算,两个数不同,结果得1。如果是0和0,1和1,两个数相同,结果得0. 有很多巧妙的用法。在游戏编程、界面编程中,会用到。 原文链接: JAVA Swing异或图形模式 https://blog.youkuaiyun.com/sureyonder/article/details/5682087 不建议用javafx. 如果做应用软件,可以用javafx。但是,一...

钢七连软件项目管理和开发 489

电拖笔记1电磁学基本知识与定律

电拖学习

qq458629839的博客 1133

让 AI 自己“画施工图”——基于扩散模型的智能 CAD 管线生成

AI驱动CAD管线设计革命:Layout2CAD实现30秒自动化出图 针对设计院70%时间耗费在管线绘制的问题,研究团队基于Stable Diffusion开发了Layout2CAD系统,实现建筑草图到DWG施工图的智能转换。该系统采用三阶段流程:语义分割建筑底图→扩散生成多通道Heatmap(含管径/标高信息)→矢量化输出DWG实体,结合129M参数的多模块模型(Diffusion UNet+GraphRefiner)及规范判别器,确保1mm精度并自动满足GB50015-2019标准。

qq_74383080的博客 2014

java之简易的文件加密器的实现

文件加密器的实现项目: 实现简单的文件加密/解密,要求咋i界面中选择文字(使用JFileChooser),并指定加密算子(0-255之间的整数),然后完成对任意文件的加密和解密,加密过程要求蚕蛹两种不同的模式实现 (1)覆盖源文件使用RandomAvccessFile来完成 (2)生成新的加密文件使用FileInputStream和FileOutputStream来完成 这两种模式可在界面进行选择...

巴胡子 1310

【STC32G12K128开发板】——从零到一:Keil C251开发环境全攻略

本文详细介绍了为STC32G12K128开发板搭建Keil C251开发环境的完整流程。从环境准备、软件安装、驱动配置到创建第一个工程并下载程序,提供了避坑指南和实用技巧,帮助开发者高效入门这款基于251内核的国产32位单片机开发。

weixin_29192141的博客 363

Java:实现图形的异或运算(附带源码)

Java:实现图形的异或运算(附带源码)

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

Allegro因为精度问题导致走线连接不上的解决办法

在用Allegro做PCB设计的时候,尤其是从其它单板上导数据过来的时候,有时会因为精度不一致导致连接不上,如下图。一般来说,可以逐个重新连接一下,但是如果连接点位比较多的话,需要花费较多时间。下面介绍如何使用Allegro自带的功能解决这个问题,具体操作如下。和Convert Figure Stackups to vias。因为精度问题导致走线连接不上的解决办法。线和过孔因为精度有微小的连接偏差。

weixin_54787054的博客 2611

Nexys4DDR+OV7670实现图像灰度显示系统嵌入式

通过对硬件平台的准备、Vivado工程配置、OV7670驱动程序的编写、图像灰度处理算法的设计以及系统集成与测试,我们成功实现了一个基于嵌入式系统的图像处理应用。当系统运行时,OV7670摄像头模块将采集到的图像传输到FPGA芯片中,然后通过图像灰度处理算法将彩色图像转换为黑白图像,并在显示设备上进行显示。OV7670摄像头模块的驱动程序是实现图像采集的核心。以上代码中,我们使用了Xilinx提供的XGpio和Xil_In32函数来进行OV7670摄像头数据的读取和GPIO的初始化。OV7670驱动程序。

WangWEel的博客 338

java swing实验_【Swing基础】Java的绘图模式使用浅析

绘图模式是指后绘制的图形与早先绘制的图形有重叠时,如何确定重叠部分的颜色。例如,后绘制的覆盖早先绘制的;或者后绘制与早先绘制的两种颜色按某种规则混合。主要有正常模式和异或模式两种:正常模式是后绘制的图形覆盖在早先绘制的图形之上,使早先绘制图形的重叠部分不再可见。异或模式把绘图看作是按图形着色。异或模式绘图时,将当前正要绘图的颜色、原先绘制的颜色以及异或模式设定的颜色作特定的运算,得到实际绘图颜色。...

weixin_32299949的博客 205

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java:实现图形的加运算(附带源码)

Java:实现图形的加运算(附带源码)

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java:实现图形的交运算(附带源码)

Java:实现图形的交运算(附带源码)

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

java swing 下载_JAVA Swing 教程

JAVA Swing 教程,包含所有练习源码和讲解教程!初级界面篇练习01分解颜色练习02画板练习03帧练习04画布练习05密码验证界面练习06对话框练习07滚动条练习08边框练习09单选框图片浏览器练习10卡片布局管理器练习11边界布局管理器练习12进程条练习13列表框和组合框练习14选项卡练习15菜单练习16菜单快捷键练习17模式对话框练习18网格布局管理器练习19复选框练习20单选框练习21...

weixin_30070339的博客 618

java swing视频教程下载_JAVA Swing 教程

JAVA Swing 教程,包含所有练习源码和讲解教程!初级界面篇练习01分解颜色练习02画板练习03帧练习04画布练习05密码验证界面练习06对话框练习07滚动条练习08边框练习09单选框图片浏览器练习10卡片布局管理器练习11边界布局管理器练习12进程条练习13列表框和组合框练习14选项卡练习15菜单练习16菜单快捷键练习17模式对话框练习18网格布局管理器练习19复选框练习20单选框练习21...

weixin_30045055的博客 401

Java课设:广告墙项目开发总结(Swing + MySQL 图片BLOB存取)

这学期 Java 课程的结课项目是做一个 C/S 模式的广告墙:客户端用 Swing 写图形界面,服务器端用 MySQL 存数据,JDBC 连接。本项目参考了《Java 2 实用教程》第 4 章的广告墙示例程序,在教材原有代码的基础上做了改进和扩展,包括修复原代码中登录状态传递缺失的问题、调整了数据库表结构、重写了图片存取的实现,并在此基础上新增了修改密码、修改广告内容和独立管理员模块三个扩展功能。

Zsrxa的博客 272

深入解析 Java 双缓冲模式(Double Buffer Pattern):以 java-design-patterns 仓库为例

双缓冲(Double Buffer)模式是游戏引擎与图形渲染领域的基础优化手段:它通过两个缓冲区交替工作,让用户永远只看到完整帧,而绘制过程在后台缓冲区中悄悄完成。本文以 java-design-patterns 仓库中的 `double-buffer` 模块([README](https://link.gitcode.com/i/d32068a60c750d10538fe43a926f3a24)

gitblog_00398的博客 88
上一篇: JAVA RMI线程模型及内部实现机制
下一篇: Swing MVC体系结构浅析
飞天金刚
博客等级 码龄17年 35粉丝 15原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值