java入门必学篇摘要.docx
《java入门必学篇摘要.docx》由会员分享,可在线阅读,更多相关《java入门必学篇摘要.docx(19页珍藏版)》请在冰豆网上搜索。
![java入门必学篇摘要.docx](https://file1.bdocx.com/fileroot1/2022-12/7/b5e5946a-7da6-42b5-8f97-459458f12432/b5e5946a-7da6-42b5-8f97-459458f124321.gif)
java入门必学篇摘要
Java入门(11)让程序更动人
摘要
Java语言提供了对各种多媒体的良好支持,在本章中我们将学习如何在你的Java语言程序中处理图像、声音、字体等资源,让你的程序更加有趣。
本章目标:
Java语言提供了对各种多媒体的良好支持,在本章中我们将学习如何在你的Java语言程序中处理图像、声音、字体等资源,让你的程序更加有趣。
11.1图像
传授新知
与其它编程语言不一样,Java语言没有为图像文件提供类于什么图像框的控件(用Java的术语来说,就是类),而是无处不可有图像。
我们可以在标签上,在按钮中,在许许多多普通的GUI部件上显示图像。
通常,在Java语言中,使用一个图像需要经过三个步骤:
1.装载图像
Java是伴随着Internet发展起来的,被认为是最优秀的Internet编程语言,因此我们经常会看到许多细节都在体现这一风格或精神。
例如,Java语言是通过URL(统一资源定位,UniformResourceLocation,最常见的URL是用来指向WEB页面的)进行文件引用的。
这样的机制,使Java语言引用一个本地文件与引用一个Internet上的文件并没有什么区别。
我们通过getImage()方法装载图像,这个方法的语法格式如下所示:
publicImagegetImage(Stringurl)
publicImagegetImage(Stringurl,Stringname)
¨第一种形式:
直接给出指向文件的URL;
¨第二种形式:
通过合并指定的url和后面的name形成新的URL。
一些提示:
因为考虑到读者不一定都了解如何使用URL表示本地文件,所以在些给出一个实例,以便大家理解:
file:
/c:
/javastudy/test.jpg
格式是:
file:
/盘符:
/路径/文件名。
需要注意是,我们使用的是“/”来隔开各个部分,而不是使用Windows下的“”符。
我们经常需要调用当前目录下的文件,即使是这样,我们也需要写出这个目录的URL,否则将无法找到这个程序。
这,太痛苦了!
不过,Java也提供了一个十分体贴的方法,让你能够很轻松地获得当前目录的URL:
getCodeBase()
这样,我们如果要调用当前目录下的1.jpg文件的话,就可以使用语句:
getImage(getCodeBase(),”1.jpg”);
getImage方法将返回一个Image对象。
所以,我们通常先定义一个Image对象,用来存放装载进来的图像,例如:
Imageimage1=getImage(getCodeBase(),”1.jpg”);
这样,就将1.jpg装载到image1中了。
2.生成ImageIcon
将图像装载进来以后,还不能够直接被程序所使用,我们还要先调用ImageIcon方法将其生成一个ImageIcon:
ImageIcon(Image)
这个方法将返回一个ImageIcon对象,有了ImageIcon对象后,就可以被使用了。
下面就是一个实例,我们将包含1.jpg的图象的image1对象转成ImageIcon对象icon1:
ImageIconicon1=newImageIcon(image1);
3.显示图像
现在,我们就可以显示这个图像了,我们将ImageIcon对象作为参数,创建标签、按钮等部件,就可以显示出这个图像了。
下面我们就分别介绍一下:
1)标签:
publicJLabel(ImageIconicon);
publicJLabel(Stringtext,ImageIconicon);
第一个构造器,是让标签中只显示图像,而第二个构造器就可以同时显示文本标签和图像。
可谓图像并茂。
2)按钮:
publicJButton(ImageIconicon);
publicJButton(Stringtext,ImageIconicon);
很明显,与标签构造器十分类似。
注意:
任何事物都是不断发展的,java.AWT包中提供的部件尚不能很好地包含图像,而更先进的java.Swing包中提供的部件就可以很好地包含图像了。
实例说明
下面,我们来构建一个显示图像的程序。
为了大家便于完成这个实例操作,我们选用了一个大家都有的图像文件:
C:
windowssystemoobeimagescnncterr.jpg文件。
为了方便操作,大家先将其拷贝到C:
javastudy目录下。
源程序:
useImage.java
importjava.applet.*;
importjava.awt.*;
importjavax.swing.*;
publicclassuseImageextendsJApplet
{
Imageimage1;
publicvoidinit()
{
JPanelpanel1=(JPanel)getContentPane();
panel1.setLayout(newBorderLayout());
image1=getImage(getCodeBase(),"cnncterr.jpg");
ImageIconicon1=newImageIcon(image1);
JLabelimagelabel=newJLabel(icon1);
panel1.add(imagelabel);
}
}
将这个程序编译后,运行的结果如下图所示:
图11-1程序useImage.java的输出
接下来,我们再来看一个有趣的程序:
源程序:
useImage2.java
importjava.applet.*;
importjava.awt.*;
importjavax.swing.*;
publicclassuseImage2extendsJApplet
{
Imageimage1,image2;
publicvoidinit()
{
JPanelpanel1=(JPanel)getContentPane();
panel1.setLayout(newBorderLayout());
image1=getImage(getCodeBase(),"ontbvsa.gif");
ImageIconicon1=newImageIcon(image1);
image2=getImage(getCodeBase(),"offtbvsa.gif");
ImageIconicon2=newImageIcon(image2);
JButtonimagebutton=newJButton(icon2);
imagebutton.setPressedIcon(icon1);
panel1.add(imagebutton,BorderLayout.CENTER);
}
}
这个程序的输出是:
图11-2程序最初的显示
图11-3当按下这个按钮时
这里,使用了一个新的方法,实现了一个特殊的效果!
imagebutton.setPressedIcon(icon1);
这就是当你按下这个按钮时,就显示icon1所指向的图像。
自测练习
1)_____c______包中定义的部件能够直接使用图像。
a.java.awt.*b.java.swing.*c.javax.swing.*
2)一个按钮__b______同时拥用文本标签和图像。
a.不能b.能
3)按钮中可以直接使用_____a_______对象。
a.ImageIconb.Imagec.Icon
4)取得当前目录的URL使用______c_______方法。
a.getURLbaseb.getURLc.getCodeBase
5)一个标签____a____同时拥用文本标签和图像。
a.能b.不能
6)编写一个程序,在默认情况下,只显示两个按钮:
MasterCard和VisaCard,
图11-4练习题图
(1)
当按下MasterCard按钮时,则显示MasterCard的图像:
图11-5练习题图
(2)
而按下VisaCard按钮时,显示MVisaCard的图像。
如下图所示:
图11-6练习题图(3)
注:
这两幅图分别是c:
windowssystemoobd_gmc.jpg和bgvisa.jpg。
练习答案
1)c在java.awt包定义的部件对图像的支持不好;java.swing包是不存在的,应该是javax.swing。
2)b当然可以。
3)aImage对象应先转成ImageIcon对象。
4)c没有什么好解释的,提供的方法名就是getCodeBase()。
5)a当然可以。
6)以下是一个实现实例:
源程序:
lianxi11_1.java
importjava.applet.*;
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
publicclasslianxi11_1extendsJApplet
{
Imageimage1,image2;
ImageIconicon1,icon2;
JButtonmc,visa;
JLabelimagelabel;
publicvoidinit()
{
Frameframe1=newFrame("lianxi11_1");
frame1.setLayout(newBorderLayout());
image1=getImage(getCodeBase(),"bgmc.jpg");
icon1=newImageIcon(image1);
image2=getImage(getCodeBase(),"bgvisa.jpg");
icon2=newImageIcon(image2);
imagelabel=newJLabel();
frame1.add(imagelabel,BorderLayout.CENTER);
JPanelpanel1=(JPanel)getContentPane();
panel1.setLayout(newGridLayout(1,2));
mc=newJButton("MasterCard");
visa=newJButton("VisaCard");
panel1.add(mc);
panel1.add(visa);
mc.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEventevt)
{
imagelabel.setIcon(icon1);
}
});
visa.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEventevt)
{
imagelabel.setIcon(icon2);
}
});
frame1.add(panel1,BorderLayout.SOUTH);
frame1.pack();
frame1.show();
}
}
11.2声音
传授新知
有时,我们需要在程序中释放声音,我可以在importjava.applet.*包的支持下,让Java程序能够播放WAV、AU和SND格式的声音文件。
1.装载声音文件
与引用图像文件一样,我们也要将声音文件装载进来,才能够供Java程序使用。
同样的,我们还是使用URL来定位一个声音文件。
在Java语言中装载声音文件,是使用getAudioClip方法,其语法格式是:
publicAudioClipgetAudioClip(Stringurl)
publicAudioClipgetAudioClip(Stringurl,Stringname)
同样的,我们可以调用getCodeBase()方法来获取当前目录的URL,这样就可以很方便地调用当前目录下的声音文件。
例如:
AudioClipclip1=getAudioClip(getCodeBase(),”carbrake.wav)
注:
carbreak.wav是office97中带的,你可以在c:
windowsmediaoffice97目录中找到,在此假设已拷贝到了c:
javastudy目录中。
这样,我们就获得了一个AudioClip(声音片段)clip1,这个声音片段中存放的就是声音文件carbreak.wav。
2.操作声音片段
使用声音比使用图像要简单得多,我们现在就可以直接对一个AudioClip(声音片段)进行操作了,不再需要转换(图像就得从Image转成ImageIcon)。
1)播放声音片段:
声音片段名.play()
一句话,就是直接调用声音片段对象的play()方法就可以将其播放出来。
2)停止播放:
声音片段名.stop()
很简单吧,play就是播放,stop就是停止,好象在用放音机一样。
3)循环播放:
声音片段名.loop()
有时,我们可能会需要一直播放一段声音,在Java语言中提供了一个很简单的方法来实现,那就是声音片段的loop方法。
实例说明
首先将c:
windowsmediaoffice97carbrake.wav拷贝到c:
javastudy目录下,然后输入以下源程序。
源程序:
useAudio.java
importjavax.swing.*;
importjava.applet.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassuseAudioextendsJApplet
{
AudioClipcarbrake;
publicvoidinit()
{
JPanelpanel1=(JPanel)getContentPane();
panel1.setLayout(newGridLayout(3,1));
carbrake=getAudioClip(getCodeBase(),"carbrake.wav");
JButtonbuttonPlay=newJButton("Play");
JButtonbuttonStop=newJButton("Stop");
JButtonbuttonLoop=newJButton("Loop");
panel1.add(buttonPlay);
panel1.add(buttonStop);
panel1.add(buttonLoop);
buttonPlay.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEventevt)
{
carbrake.stop();
carbrake.play();
}
});
buttonStop.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEventevt)
{
carbrake.stop();
}
});
buttonLoop.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEventevt)
{
carbrake.stop();
carbrake.loop();
}
});
}
}
这个程序经编译后用appletviewer可以看到如下界面:
图11-7useAudio.java的程序界面
当你按下play按钮时,你就会听到一声汽车的刹车声。
而当你按下Loop按钮时,你就会听到边续不断的汽车刹车声。
当你厌倦了的时候,就按下stop按钮,声音就消失了。
自测练习
1)在Java语言中,使用_______类来装载声音文件。
a.Soundb.SoundClipc.AudioClipd.Clip
2)___________包提供了对声音的支持。
a.java.awt.*b.javax.swing.*c.java.swing.*d.javax.awt.*
3)在c:
windowsmedia目录下有一个TheMicrosoftSound.wav,它是Windows启动时的欢迎乐,在c:
windowsmediaoffice97目录下有一个chimes.wav,它是一段十分和谐的音乐。
下面请您编写一个程序,构建两个按钮,第一个是MicrosoftSound,按下时就播放第一个音乐;第二个按钮则是chimes,按下时就播放第二个音乐。
程序界面如下图所示:
图11-8练习题图
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
练习答案
1)c在Java中,使用AudioClip来装载声音文件。
2)a
3)以下是一个程序实例:
源程序:
lianxi11_2.java
importjavax.swing.*;
importjava.applet.*;
importjava.awt.*;
importjava.awt.event.*;
publicclasslianxi11_2extendsJApplet
{
AudioClipclip1,clip2;
publicvoidinit()
{
JPanelpanel1=(JPanel)getContentPane();
panel1.setLayout(newGridLayout(2,1));
clip1=getAudioClip(getCodeBase(),"TheMicrosoftSound.wav");
clip2=getAudioClip(getCodeBase(),"chimes.wav");
JButtonbutton1=newJButton("MicrosoftSound");
JButtonbutton2=newJButton("Playchime");
panel1.add(button1);
panel1.add(button2);
button1.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEventevt)
{
clip2.stop();
clip1.play();
}
});
button2.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEventevt)
{
clip1.stop();
clip2.play();
}
});
}
}
11.3改变字体
传授新知
不知不觉中,我们已经学习了很多的关于Java的知识了,从字符界面到图形界面,从呆滞的文字到多彩的图像、声音……
不过,不知道大家注意到没有,我们一直没有改变程序中显示出来的文字的字体!
现在,我们就来补一下这方面的知识。
字体是一个十分神奇的东西,例如,我们使用了黑体字体现出了各个章节,使用楷体字体现出了一些注释、提示、说明等等。
它使得我们的文本更生动、更直观。
字体由三种属性决定:
1)字体名(familyname)
字体名可以分成两大类:
一种是中文字体,如宋体、楷体、黑体等;另一种是英文字体,如Arial、TimesNewRoman等等;
小知识:
对于英文字体中有两个术语:
“等宽字体”与“变宽字体”,等宽字体是指每一英文字母的宽度一样大;而变宽字体则不然,m与l所占的宽度就不同。
2)大小(size)
与字体名一样,大小也有两种衡量方式:
一种是五号、六号,号数越小字越大;另一种是磅值(这是一种印刷界的通用单位),如11磅、12磅,它们的值越大,字越大。
不过在Java中只支持后者,也就是磅值(point)。
3)风格(style)
如斜体、粗体、下划线等。
在Java中有四种字体风格,由Font类的值来定义。
¨Font.PLAIN(普通)
¨Font.BOLD(加粗)
¨Font.ITALIC(斜体)
¨Font.BOLD+Font.ITALIC(粗斜体)
也就是说,在Java语言中并不支持下划线这种风格。
好了,我们已经知道了字体的详细内容,下面我们来看一下如何在程序中设置、改变字体?
很简单,我们先使用以下构造器构造一个字体对象:
publicFont(StringfamilyName,intstyle,intsize)
然后,调用对象的setFont方法来设置字体:
publicvoidsetFont(Fontfont)
正如上面所讲的一样,我们能够很轻松地设置风格与大小,但可以选择哪些字体名呢?
我无法回答这个问题,谁也无法回答这个问题!
因为这个问题的答案掌握在你的系统中!
也就是能够使用哪些字体,完全取决于