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

  • setPaintMode():设置绘图模式为覆盖模式(正常模式)。正常模式是绘图的默认模式。
  • setXORMode(Color c):设置绘图模式为异或模式,参数c为异或模式设定的绘图颜色。

设背景色为B,用setXORMode()设置的颜色为C,另用某个非背景色D绘图,XOR模式有以下确定实际绘图颜色的法则:
B + B = C,用背景色绘图,出现C颜色。
D + D = B,当一个图形重画时就能清除原先画的图形。
B + D = B和D的混合色(当B,D不相同时)。
如果某区域已用D着色,再用E着色,则结果是:
D + E = D和E的混合色(当D,E不相同时)。

 【例12-4】使用XOR绘图模式的应用程序,绘图效果参见图7.2。
import javax.swing.*;
import java.awt.*;
public class Example7_4 extends JFrame{
public static void main(String args[]){
GraphicsDemo myGraphicsFrame = new GraphicsDemo();
}
}
class ShapesPanel extends JPanel{
SharpesPanel(){
setBackground(Color.white);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
setBackground(Color.yellow); //背景色为黄色
g.setXORMode(Color.red); //设置XOR绘图模式,颜色为红色
g.setColor(Color.green);
g.fillRect(20, 20, 80, 40); //实际颜色是green + yellow的混合色=灰色
g.setColor(Color.yellow);
g.fillRect(60, 20, 80, 40); //后一半是yellow+yellow=read,前一半是yellow+灰色
g.setColor(Color.green);
g.fillRect(20, 70, 80, 40); //实际颜色是green+yellow的混合色=灰色.
g.fillRect(60, 70, 80, 40);
//前一半是(green+yellow)+gray =背景色,后一半是green+yellow = gray
g.setColor(Color.green);
g.drawLine(80, 100, 180, 200); //该直线是green+yellow = gray
g.drawLine(100, 100, 200, 200); //同上
/*再绘制部分重叠的直线.原直线中间段是灰色+灰色=背景色,延长部分是green+yellow=gray.*/
g.drawLine(140, 140, 220, 220);
g.setColor(Color.yellow); //分析下列直线颜色变化,与早先的力有重叠
g.drawLine(20, 30, 160, 30);
g.drawLine(20, 75, 160, 75);
}
}
class GraphicsDemod extends JFrame{
public GraphicsDemo(){
this.getContentPane().add(new ShapesPanel());
setTile("基本绘图方法演示");
setSize(300, 300);
setVisible(true);
}
}

系列文章:

Java知多少(97)绘图模式概述的更多相关文章

  1. Java知多少(98)Graphics类的绘图方法

    Graphics类提供基本绘图方法,Graphics2D类提供更强大的绘图能力.本节讲解Graphics类,下节讲解Graphics2D. Graphics类提供基本的几何图形绘制方法,主要有:画线段 ...

  2. Java知多少(99)Graphics2D类的绘图方法

    Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一个Graphics2D类,它拥用更强大的二维图形处理能力,提供.坐标转换.颜色管理以及文字布局等更精确的 ...

  3. Java知多少(完结篇)

    Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...

  4. Java知多少(下)

    Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...

  5. Java知多少(112)数据库之删除记录

    删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...

  6. Java知多少(111)数据库之修改记录

    修改数据表记录也有3种方案. 一.使用Statement对象 实现修改数据表记录的SQL语句的语法是:    update表名 set 字段名1 = 字段值1,字段名2 = 字段值2,……where特 ...

  7. Java知多少(110)数据库之插入记录

    插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...

  8. Java知多少(109)数据库更新

    数据库更新操作包括数据表创建.删除.以及数据表记录的增加.删除.修改等操作.如果利用数据 SQL命令实现,则利用Statement对旬的executeUpdate()方法,执行SQL的update语句 ...

  9. Java知多少(108)数据库查询简介

    利用Connection对象的createStatement方法建立Statement对象,利用Statement对象的executeQuery()方法执行SQL查询语句进行查询,返回结果集,再形如g ...

随机推荐

  1. dns 安全可视化

    dns 安全 可视化 === 明确目标: 1,什么是dns安全可视化. 什么是dns 2,怎么做到dns安全可视化. 3,什么是BI 4,dns安全 是什么, 有哪些数据需要展示. 明确方法: 1,先 ...

  2. [Coding Study]——目录

    Coding Study Source Code for cnblogs This is the source code for coding study, you can see my Coding ...

  3. BZOJ.4766.文艺计算姬(Prufer)

    题目链接 这是完全二分图,那么在构造Prufer序列时,最后会剩下两个点,两点的边是连接两个集合的,这两个点自然分属两个集合 那么集合A被删了m-1次,每次从n个点中选:B被删了n-1次,每次都可以从 ...

  4. BZOJ.1299.[LLH邀请赛]巧克力棒(博弈论 Nim)

    题目链接 \(Description\) 两人轮流走,每次可以从盒子(容量给定)中取出任意堆石子加入Nim游戏,或是拿走任意一堆中正整数个石子.无法操作的人输.10组数据. \(Solution\) ...

  5. struts2动态跳转action,修改和添加共用一个页面

    <s:form action="role_%{ id == null ? 'add' : 'edit' }"> <s:hidden name="id&q ...

  6. spring源码分析系列 (5) spring BeanFactoryPostProcessor拓展类PropertyPlaceholderConfigurer、PropertySourcesPlaceholderConfigurer解析

    更多文章点击--spring源码分析系列 主要分析内容: 1.拓展类简述: 拓展类使用demo和自定义替换符号 2.继承图UML解析和源码分析 (源码基于spring 5.1.3.RELEASE分析) ...

  7. Java svnkit check update commit

    import java.io.File; import org.apache.log4j.Logger;import org.tmatesoft.svn.core.SVNCommitInfo;impo ...

  8. File构建实例的路径:绝对路径和相对路径

    public static void main(String[] args) throws Exception { File file = new File("bin/dyan.txt&qu ...

  9. 关于php开发中的字符编码问题总结的几个要点

    用php这么久,今天终于要彻底总结下php乱码问题,因为实在是吃过不少亏啊 1:header("content-type:text/html;charset=utf-8")或者&l ...

  10. Iowait的成因、对系统影响及对策--systemtap

    http://blog.csdn.net/yunlianglinfeng/article/details/51698607