📄 jv0401.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0040)http://king.online.ha.cn/java/jc/Jyu.htm -->
<HTML>
<HEAD><TITLE>Java对多媒体的支持</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="MSHTML 5.00.2614.3500" name=GENERATOR>
<LINK href="java04.css" rel=stylesheet type=text/css>
<SCRIPT language=JavaScript>
<!-- Hide the script from old browsers --
// Michael P. Scholtis (mpscho@planetx.bloomu.edu)
// All rights reserved. January 15, 1996
// You may use this JavaScript example as you see fit, as long as the
// information within this comment above is included in your script.
function MakeArray(n){
this.length=n;
for(var i=1; i<=n; i++) this[i]=i-1;
return this
}
hex=new MakeArray(16);
hex[11]="A"; hex[12]="B"; hex[13]="C"; hex[14]="D"; hex[15]="E"; hex[16]="F";
function ToHex(x){ // Changes a int to hex (in the range 0 to 255)
var high=x/16;
var s=high+""; //1
s=s.substring(0,2); //2 the combination of these are the same as the trunc function
high=parseInt(s,10); //3
var left=hex[high+1]; // left part of the hex-value
var low=x-high*16; // calculate the rest of the values
s=low+""; //1
s=s.substring(0,2); //2 the combination of these are the same as the trunc function
low=parseInt(s,10); //3
var right=hex[low+1]; // right part of the hex-value
var string=left+""+right; // add the high and low together
return string;
}
function rainbow(text){
text=text.substring(3,text.length-4); // gets rid of the HTML-comment-tags
color_d1=255; // any value in 'begin' 0 to 255
mul=color_d1/text.length;
for(i=0;i<text.length;i++){
color_d1=255*Math.sin(i/(text.length/3)); // some other things you can try>> "=255-mul*i" to fade out, "=mul*i" to fade in, or try "255癕ath.sin(i/(text.length/3))"
color_h1=ToHex(color_d1);
color_d2=mul*i;
color_h2=ToHex(color_d2);
document.write("<FONT COLOR='#FF"+color_h1+color_h2+"'>"+text.substring(i,i+1)+'</FONT>');
}
}
// --End Hiding Here -->
</SCRIPT>
<SCRIPT LANUGAGE="JavaScript">
<!--
function pop(pageurl) {
var
popwin=window.open(pageurl,"popWin","scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no,width=700,height=450");
return false;
}
//-->
</SCRIPT>
<STYLE type=text/css>.main {
FONT-FAMILY: "宋体"; FONT-SIZE: 9pt
}
</STYLE>
<SCRIPT language=LiveScript>
function WinOpen() {
msg=open("","DisplayWindow","toolbar=no,directories=no,menubar=no");
msg.document.write("");
msg.document.write("<CENTER><H1>酷毙了</H1><h2>这 是<B>JavaScript</B>所开的视窗!</h2></CENTER>");
}
</SCRIPT>
</HEAD>
<BODY background=bk.jpeg bgColor=#ffffff leftMargin=0 text=#000000 topMargin=0 marginwidth="0" marginheight="0" tracingopacity="35" tracingsrc="file:///D|/tiu.jpg">
<p> </p>
<H3>第4章 Java对多媒体的支持</H3>
<P> Java语言的内置类库对多媒体技术的支持能力相当强,尤其是对文本、图形、图像、声音等媒体的处理与展示均提供了极其方便而又丰富的接口。更令人兴奋不已的是,综合运用这些媒体所编制出来的一个个Java小应用程序(Applet),使向来冷冰冰的静态的Web主页(Homepage)上居然展现出一番热热闹闹的动态的新景观,这便是著名的Java动画。在这一章里,我们就将进入到Java多姿多彩的多媒体世界</p>
<hr size=1>
<P> <a name="41"></a>4.1 图形与文本</P>
<P>如何利用Java的绘图方法来绘制各式各样图形以及显示各种文本字体,并配以所喜爱颜色,可以说是Java多媒体技术中的一项基本功,也是这一节将要介绍的主要内容。</P>
<p> <a name="411"></a>4.1.1 图形的绘制</P>
<P> Java语言的类库中提供了丰富的绘图方法(method),其中大部分对图形、文本、图像(image)的操作方法都定义在Graphics类中。我们已经知道,Graphics类又是java.awt程序包的一部分,因此,每当我们要进行图形、文本、图像的处理时,不要忘了在Java源文件的头部先写上:</P>
<P> import java.awt.Graphics;</P>
<P> 在这里要特别指出的是,当我们想要在屏幕上绘制图形、文本、图像时,并不需要直接使用new来产生一个Graphics类的对象实例,而在java.awt.Applet类的paint(
)方法(见上一章)中,我们已经得到了一个Graphics对象的引用,这是系统直接将生成好的Graphics对象通过参数形式传递给paint( )方法。因此,我们只要在这个对象上进行图形、文本及图像的绘制操作,就可以在屏幕上看到所显示的结果。</P>
<P> 1. 图形坐标系统</p>
<P> 为了将某一图形在屏幕上绘制出来,我们首先要碰到的问题也许就是“画在哪个位置”,为了解决这个问题就必须有一个精确的图形坐标系统来将该图形定位。</P>
<P> 与大多数其它计算机图形系统所采用的二维坐标系统一样,Java的坐标原点(0,0)在屏幕的左上角,水平向右为X轴的正方向,竖直向下为Y轴的正方向,每个坐标点的值表示屏幕上的一个象素点的位置,因此,所有坐标点的值都取整数。图4-1表示用此图形坐标系统在屏幕上绘制一个矩形。</P>
<P> 2. 画线</P>
<p> 在Java的Graphics类中提供画线功能的是drawLine( )方法,其调用格式如下:</P>
<P> drawLine(int x1,int y1,int x2,int y2)</p>
<P> 该方法需要设置四个参数,其中x1,y1表示线段的一个坐标点,x2,y2表示线段的另一个坐标点。如下面这段程序画出两条线段,其显示结果如图4-2所示。</p>
<P> <IMG height=260 src="tu4-1.gif" width=421> </p>
<DIV>
<p> 图4-1 图形坐标系统</p>
</DIV>
<p> 1: import java.awt.Graphics;<br>
2: public class Lines extends java.applet.Applet{<br>
3: public void paint(Graphics g){<br>
4: g.drawLine(30,30,70,70);<br>
5: g.drawLine(60,50,60,50);<br>
6: }<br>
7: }</p>
<p> <IMG height=150 src="tu4-2.gif" width=179> </P>
<DIV>
<p> 图4-2 一条线段与一个点</p>
</DIV>
<p> 由于Graphics类不专门提供画点的方法,所以程序中第5行将线段的两个点的坐标均设为(60,50),因而就相当于在此处画了一个点。</p>
<p> 3. 矩形</p>
<p> Graphics类中提供了三种类型的矩形,它们分别是普通矩形、圆角矩形和立体矩形。而每一种矩形都提供两种不同风格的方法,一种是仅画出矩形的边框;另一种是不仅画出边框,并且还用相同的颜色将整个矩形区域填满。</P>
<P> (1)普通矩形</p>
<P> 画普通矩形需调用drawRect( )或fillRect( )方法,它们的调用格式如下:</P>
<P> drawRect(int x, int y, int width, int height) //边框型风格<br>
fillRect(int x, int y, int width, int height) //填充型风格</p>
<p> 其中头两个参数分别表示矩形左上角的x坐标和y坐标,后两个参数分别表示矩形的宽度和高度。如下面的paint( )方法画出两个矩形,其显示结果如图4-2所示。</p>
<p> public void paint(Graphics g){ <br>
g.drawRect(40,20,60,40); <br>
g.fillRect(120,20,60,40); <br>
} </p>
<p> <IMG height=150 src="tu4-3.gif" width=228> </P>
<DIV>
<p> 图4-3 普通矩形的例子</p>
</DIV>
<p> (2)圆角矩形</p>
<p> 圆角矩形,也就是矩形的四个顶角呈圆弧状,每个圆弧其实是由四分之一的椭圆弧所构成。画圆角矩形的两个方法的调用格式如下:</p>
<p> drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)<br>
fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)</p>
<p> 我们可以看出,它们除了具有和普通矩形含义相同的前四个参数外,还多了两个用来述圆角性质的参数。其中arcWidth代表了圆角弧的横向直径;arcHeight代表了圆角弧的纵向直径。例如图4-4中左边一个圆角矩形所设的圆角参数为(arcWidth=80,
arcHeight=30),其效果就相当于该圆角弧存在于一个长40宽15的小矩形中;而右边一个圆角矩形的圆角参数为(arcWidth=100, arcHeight=60),并且和整个圆角矩形的width和height参数值相等,因而该圆角矩形实际变成了一个椭圆。</p>
<p> <IMG
height=154 src="tu4-5.gif" width=500></p>
<p> 图4-4 圆角矩形的参数设置</p>
<p> 下面的paint( )方法画出三个圆角矩形,显示效果如图4-5所示。我们不难发现,随着arcWidth和arcHeight值的增大,矩形的圆角就越圆。</p>
<p> public void paint(Graphics g){<br>
g.drawRoundRect(20,20,80,60,20,20);<br>
g.fillRoundRect(120,20,80,60,40,30);<br>
g.drawRoundRect(220,20,80,60,60,40);}</p>
<p> <IMG
height=169 src="tu4-6.gif" width=334> </p>
<p> 图4-5 圆角矩形的例子</p>
<p> (3)立体矩形</p>
<p> 立体矩形也可以说是三维矩形。其实,Java中的立体矩形并非真正的三维图形,而仅仅是在矩形的边框上增加一点阴影,使矩形看上去相对表平面好象有凸出或凹下的效果,其调用方法的格式如下:</p>
<p> draw3DRect(int x, int y, int width, int height, boolean raised) <br>
fill3DRect(int x, int y, int width, int height, boolean raised)</p>
<p> 这两个方法中的前四个参数与drawRect( )方法中所用的参数含义是一样的,第五个参raised便是定义该立体矩形是具有凸出(值为true)还是凹下(值为false)的效果。例如,下面的paint(
)方法中,分别画了一个凸出的和一个凹下的矩形。其显示效果如图4-6所示。确实,由于Java立体矩形中的阴影实在太薄,立体效果当然也就不太明显,图4-6右边是一个放大了的凹角形状。</p>
<p> public void paint(Graphics g){<br>
g.draw3DRect(20,20,80,60,true);<br>
g.fill3DRect(120,20,80,60,false);<br>
}</p>
<p> <IMG
height=156 src="tu4-7.gif" width=474> </p>
<p> 图4-6 立体矩形的例子</p>
<p> 4.多边形</p>
<p> 多边形的画法通常是给出一组坐标点,再用直线段将这些点依次连接起来。Graphics类中也提供两个方法来画多边形,一个是边框型drawPolygon(
)方法,另一个是填充型fillPolygon( )方法,并且每一种方法都有两种不同的参数类型。第一种参数类型的调用格式为:</p>
<p> drawPolygon(int xPoints[],int yPoints[],int nPoints)<br>
fillPolygon(int xPoints[],int yPoints[],int nPoints)</p>
<p> 其中xPoints参数是一个整数数组,用以存放多边形坐标点的X坐标值,yPoints参数放相应的一组Y坐标值,nPoints则表示共有几个坐标点。如下面的paint(
)方法分别画了一个边框型和一个填充型的多边形,其显示效果如图4-7所示。</p>
<p> public void paint(Graphics g){<br>
int Poly1_x[]={30,63,115,72,67};<br>
int Poly1_y[]={40,20,95,74,106};<br>
int Poly1_pts=Poly1_x.length;<br>
int Poly2_x[]={180,213,265,222,217};<br>
int Poly2_y[]={40,20,95,74,106};<br>
int Poly2_pts=Poly2_x.length;<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -