Java知多少(97)绘图模式概述
绘图模式是指后绘制的图形与早先绘制的图形有重叠时,如何确定重叠部分的颜色。例如,后绘制的覆盖早先绘制的;或者后绘制与早先绘制的两种颜色按某种规则混合。主要有正常模式和异或模式两种:正常模式是后绘制的图形覆盖在早先绘制的图形之上,使早先贩图形的重叠部分不再可见。异或模式把绘图看作是按图形着色。异或模式绘图时,将当前正要绘图的颜色、原先绘制的颜色以及异或模式设定的颜色作特定的运算,得到实际绘图颜色。设置绘图模式的方法有:
- 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)绘图模式概述的更多相关文章
- Java知多少(98)Graphics类的绘图方法
Graphics类提供基本绘图方法,Graphics2D类提供更强大的绘图能力.本节讲解Graphics类,下节讲解Graphics2D. Graphics类提供基本的几何图形绘制方法,主要有:画线段 ...
- Java知多少(99)Graphics2D类的绘图方法
Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一个Graphics2D类,它拥用更强大的二维图形处理能力,提供.坐标转换.颜色管理以及文字布局等更精确的 ...
- Java知多少(完结篇)
Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...
- Java知多少(下)
Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...
- Java知多少(112)数据库之删除记录
删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...
- Java知多少(111)数据库之修改记录
修改数据表记录也有3种方案. 一.使用Statement对象 实现修改数据表记录的SQL语句的语法是: update表名 set 字段名1 = 字段值1,字段名2 = 字段值2,……where特 ...
- Java知多少(110)数据库之插入记录
插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...
- Java知多少(109)数据库更新
数据库更新操作包括数据表创建.删除.以及数据表记录的增加.删除.修改等操作.如果利用数据 SQL命令实现,则利用Statement对旬的executeUpdate()方法,执行SQL的update语句 ...
- Java知多少(108)数据库查询简介
利用Connection对象的createStatement方法建立Statement对象,利用Statement对象的executeQuery()方法执行SQL查询语句进行查询,返回结果集,再形如g ...
随机推荐
- [NOIP2017]逛公园 最短路+拓扑排序+dp
题目描述 给出一张 $n$ 个点 $m$ 条边的有向图,边权为非负整数.求满足路径长度小于等于 $1$ 到 $n$ 最短路 $+k$ 的 $1$ 到 $n$ 的路径条数模 $p$ ,如果有无数条则输出 ...
- 洛谷.3273.[SCOI2011]棘手的操作(左偏树)
题目链接 还是80分,不是很懂. /* 七个操作(用左偏树)(t2表示第二棵子树): 1.合并:直接合并(需要将一个t2中原有的根节点删掉) 2.单点加:把这个点从它的堆里删了,加了再插入回去(有负数 ...
- 通俗讲解 异步,非阻塞和 IO 复用
1. 阅前热身 为了更加形象的说明同步异步.阻塞非阻塞,我们以小明去买奶茶为例. 1.1 同步与异步 同步与异步的理解 同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式. 同步: 当一个同 ...
- rabbitmq使用方法(二)
Work Queues In the first tutorial we wrote programs to send and receive messages from a named queue. ...
- Art: Neural Style Transfer
Andrew Ng deeplearning courese-4:Convolutional Neural Network Convolutional Neural Networks: Step by ...
- iOS开发-获取属性和方法
iOS开发数据存储有两种方式,属性列表和对象编码,属性列表可以通过NSArray,NSMutableArray,NSMutableDictionary,存储对象我们可以通过归档和解档来完成.如果我们想 ...
- eclipse中的yaml插件
现在spring中推荐使用yaml格式的配置文件,扩展名为yml 在eclipse中编辑的话,可以安装yaml编辑插件,在Eclipse Marketpalce可以搜到两款: YEdit的推荐指数38 ...
- 服务器能远程连接,网络连接正常,但是外网域名Ping不通,浏览器中打不开网站
服务器能远程连接成功,但在浏览器中打不开任何网站,出现这个问题一般是安装什么软件引起IE的相关设置做了变动或者是服务器中了病毒引起的,或是服务器的DNS设置是错误的. 一.先检查服务器DNS是否正确 ...
- phpBB3.2 自动检测浏览器语言
这是根据HTTP request header里的Accept-Language信息来处理的. 首先看一下Accept-Language的格式 Accept-Language: <languag ...
- java 对一个字符串进行加减乘除的运算
记录一个小程序,里面涉及到的JAVA知识点有:字符串扫描,list删除元素的方法,泛型的使用,JAVA中的/要注意的事项.有兴趣的可以看看 package com.demo; import java. ...