- 论坛徽章:
- 0
|
文本与字体
Graphics类也提供了在屏幕上显示文本的方法,但若要使文本的显示更具特色,让它满足某种字体、某种风格及尺寸大小的要求,就需要用字体类Font来定义。
1. 设置文本信息
当我们想要在屏幕上输出文本信息时,首先要确定的就是采用何种字体,例如中文的“宋体”、“楷体”,或是英文的“TimesRoman”体、
“Courier”体等等,接着再决定该字体输出时采用哪种风格,是斜体型还是粗体型等等,最后还要确定该字体的大小尺寸。所有这些都由Font类来定
义,我们不难猜出其构造方法的调用格式:
Font(String name, int style, int size)
不错,它的三个参数就是我们先前所说的字体名、字体风格和尺寸大小。并且Font类中已定义了类变量来表示字体的style值,如
Font.BOLD(表示粗体)、Font.ITALIC(表示斜体)、Font.PLAIN(表示普通体)。由于它们被定义为整数常量,因此可以进行相
加运算来生成复合style,例如想让style即是粗体又是斜体,可以这样写:
Font fn = new Font("TimesRoman", Font.BOLD+Font.ITALIC, 28);
虽然我们定义了所需的字体,但其显示结果有时也并非如愿。因为运行该applet的客户端系统有可能并未安装该字体,这时Java就会以缺省字
体来替代它。因此,不妨先查看一下客户端系统目前究竟支持哪些字体,这就要用到java.awt.Toolkit类中的getFontlist(
)方法,它返回系统目前可用的字体列表,然后就可决定到底选用哪种字体。例如:
Toolkit systk = Toolkit.getDefaultToolkit( );
tring fonts = systk.getFontList( );
2. 显示文本
创建了Font对象以后,我们就可以利用Graphics类中提供的drawString( )、drawChars( )等方法来显示字符串与字符。当然,首先还要用setFont(
)方法,将所创建的Font对象设为当前所用的字体。下面就是Graphics类中这三个方法的调用格式:
setFont(Font font);
drawString(String str, int x, int y)
drawChars(char data[], int offset, int length, int x, int y)
其中setFont(
)方法的参数就是一个创建好的Font对象,表明系统当前选用哪个Font对象所定义的字体信息。drawString(
)方法中的str即是要显示的字符串,x,y指明字符串显示的起始位置坐标,具体的说,x表示第一个字符的左边界,y表示整个字符串的基线
(baseline,见图4-12)位置坐标。因此,这里的坐标并不是通常意义上的矩形区域的左上角。drawChars(
)方法则是用来显示多个字符的,也就是从给定的字符数组中抽取连续的一部分显示在屏幕上。其中data参数就是给定的原始字符数组,offset表示从第
几个字符位置开始显示,length表示共显示几个字符,x与y参数的含义与drawString( )方法一样,代表显示在屏幕上的起始位置。
如下面的程序显示了一些不同的文本字体,其显示结果如图4-11所示。
import java.awt.Graphics;
import java.awt.Font;
public class Fonts extends java.applet.Applet{
public void paint(Graphics g){
Font ftp20 = new Font("TimesRoman",Font.PLAIN,20);
Font fai15 = new Font("Arial",Font.ITALIC,15);
Font fcb24 = new Font("Courier",Font.BOLD,24);
Font fsib30 = new Font("宋体",Font.ITALIC+Font.BOLD,30);
g.setFont(ftp20);
g.drawString("Font name TimesRoman , style plain , size 20",10,20);
g.setFont(fai15);
g.drawString("Font name Arial , style italic , size 15",10,50);
g.setFont(fcb24);
g.drawString("Font name Courier , style bold , size 24",10,80);
g.setFont(fsib30);
g.drawString("字体名 宋体,风格 斜体+粗体,尺寸 30",10,120);
}
}
图4-11 各种字体的例子
3. 获取字体信息
(1)获取基本信息
如果不清楚系统当前所用的字体信息,可以先调用Graphics类中的getFont( )方法,该方法无参数,它返回系统当前所用的Font对象,然后就可以调用Font类中提供的几个方法来获取该字体的基本信息。表4-1列出了Font类中的这些方法。
表4-1 Font类提供的一些主要方法
(2)获取详细信息
有时候,我们为了在屏幕上更精确地定位文本,还需要了解所选字体的更详细的信息,例如整个字符串到底有多高,有多宽,两行字符串的间隙有多少等
等。这时,我们需要用到一个新的类FontMetrics来提供这一信息。我们可以调用Graphics类中的getFontMetrics(
)方法来获取关于当前字体的FontMetrics对象(该方法也无参数)。然后就可以利用表4-2所示的FontMetrics类中所提供的方法来获取
更详细的字体信息。图4-12中给出了字体中关于Ascent、Descent、Leading等概念的示意图。
4.1.3 颜色的设置
现在,让我们改变一下总是在灰色背景上用黑色绘图以及显示文本的习惯,而给我们的applet增添一些五彩缤纷的色彩。与设置字体信息相似,要
设置新的颜色,必须先创建Color对象,然后再调用Graphics类中设置颜色的方法来将生成的Color对象设为当前所用的绘图颜色。
图4-12字体
1. 创建Color类
Java中每一种颜色都看成是由红(R)、绿(G)、蓝(B)三原色组合而成的。因此Color类的构造方法采用如下格式:
Color(int r, int g, int b)
其中每个参数的值都在0到255之间,数值越大就表明这种颜色的成份越重。例如(0,0,0)代表黑色,(255,0,0)代表红色。当然最终
在屏幕上是否能显示所定义的颜色还取决于客户端系统的调色板所支持的颜色种类的多少。若客户端系统的调色板并不支持当前所定义的颜色值,就会在调色板中挑
选最接近的颜色来代替。
Color类中还定义了一些标准颜色的Color对象存储在类变量中,使的这些标准颜色的引用显得更为方便。这些类变量如表4-3所示。
2. 设置当前颜色
为了能使用刚才生成好的Color对象来显示文本及绘制图形,还需调用Graphics类中的setColor( )方法把这个对象设置为系统当前所用的绘画颜色,其调用格式为:
setColor(Color c)
例如,想要用蓝色来显示文本,最简单的办法是直接引用标准色的类变量:
setColor(Color.blue);
另外,Java还提供了设置整个applet的背景和前景的方法,它们分别是setBackground(
)方法和setForeground(
)方法,它们都被定义在java.awt.Component类中,因此该方法能被其子类(包括Applet类及Applet类的子类)自动继承,它们的
调用格式与setColor( )方法一样:
setBackground(Color c)
setForeground(Color c)
其中setForeground( )方法将影响到applet中所有已经用其它任何颜色所绘制的图形显示的文本,把它们一下子都变为该方法所定义的前景颜色,而不需用该颜色重新一一绘制。有“set”必有相应的“get”,Java中还提供了getColor(
)方法(Graphics类中)、getBackground( )方法和getForeground( )方法(Component类中)来分别获取当前的绘图颜色、applet背景及前景颜色的对象。
下面,我们写一段程序来显示一排用随机定义的颜色所填充的小方块,它们的显示效果如图4-13所示。
import java.awt.Graphics;
mport java.awt.Color;
public class Colors extends java.applet.Applet{
public void paint(Graphics g){
int red,green,blue;
for (inti=10;i
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/106716/showart_2119431.html |
|