颜色
使用Graphics2D类的setPaint方法可以为图形环境上的所有后续的绘制操作选择颜色。要想绘制多种颜色,就需要按照选择颜色,绘制图形,再选择颜色,再绘制图形的过程实施。
Color类用于定义颜色。在java.awt.Color类中提供了13个预定义的常量,它们分别表示13种标准颜色,如表7-1所示。
例如:
g2.setPaint(Color.RED);
g2.drawString("Warning!", 100, 100);
注意:在JDK 1.4之前的版本中,标准颜色的名字为小写形式,例如,Color.red。这似乎有些超出寻常,因为标准编码的惯例是采用大写形式书写常量。从JDK 1.4开始,可以采用大写的形式书写标准颜色的名字,不过,为了向后兼容,也可以用小写形式书写。
可以通过提供红、绿和蓝三色成分来创建一个Color对象,以达到定制颜色的目的。三种颜色都是用0~255(也就是一个字节)之间的整型数值表示,调用Color的构造器格式为:
Color(int redness, int greenness, int blueness)
下面是一个定制颜色的例子:
g2.setPaint(new Color(0, 128, 128)); //a dull blue-green
g2.drawString("Welcome!", 75, 125);
注意:除了纯色以外,还可以选择更复杂的“颜料”设置,例如,改变色调(hue)或者图像。有关这方面更加详细的内容请参阅卷II中的高级AWT章节。如果使用Graphics对象,而不是Graphics2D对象,就需要使用setColor方法设置颜色。
要想设置背景颜色,就需要使用Component类中的setBackground方法。Component类是JPanel类的祖先。
MyPanel p = new MyPanel( );
p.setBackground(Color.PINK);
另外,还有一个setForeground方法,它是用来设定在组件上进行绘制时使用的默认颜色。
提示:从名字就可以看出,Color类中的brighter( )方法和darker( )方法的功能,它们分别加亮或变暗当前的颜色。使用brighter方法也是加亮条目的好办法。实际上,brighter( )只微微地加亮一点。要达到耀眼的效果,应该调用这个方法三次:c.brighter( ).brighter( ).brighter( )。
Java在SystemColor类中预定义了很多颜色的名字。在这个类中的常量,封装了用户系统的各个元素的颜色。例如,
p.setBackground(SystemColor.window)
它将把面板的背景颜色设定为用户桌面上所有窗口使用的默认颜色。(无论何时重新绘制窗口,都会填充背景颜色。)当希望让绘制的用户界面元素与用户桌面上已经存在的其他元素的颜色匹配时,使用SystemColor类中的颜色非常有用。表7-2列出了系统颜色的名字和它们的含义。
java.awt.Color 1.0
• Color(int r, int g, int b)
创建一个颜色对象。
参数:r 红色值(0~255)
g 绿色值(0~255)
b 蓝色值(0~255)
java.awt.Graphics 1.0
• void setColor(Color c)
改变当前的颜色。所有后续的绘图操作都使用这个新颜色。
参数:c 新颜色
java.awt.Graphics2D 1.2
• void setPaint(Paint p)
设置这个图形环境的绘制属性。Color类实现了Paint接口。因此,可以使用这个方法将绘制属性设置为纯色。
java.awt.Component 1.0
• void setBackground(Color c)
设置背景颜色。
参数:c 新背景颜色
• void setForeground(Color c)
设置前景颜色。
参数:c 新前景颜色
填充图形
可以选用一种颜色(通常,用当前的绘制颜色)填充闭合图形(例如,矩形或椭圆)的内部。要想填充图形,只需要将draw替换为fill就可以了:
Rectangle2D rect = . . .;
g2.setpaint(Color.RED);
g2.fill(rect); //fills rect with red color
在例7-5的程序中先用红色填充一个矩形,然后
再用暗绿色填充该矩形的内接椭圆,如图7-12所示。
例7-5 FillTest.java