150 likes | 378 Views
第 13 章 Java 应用实例. 13.1 程序设计. 本章根据前面所学的 Java 语言知识,设计一个简单的图像浏览和播放声音的 Java 应用程序。 程序在一个框架窗口中创建了一个具有两个卡片页标签的 JTabbedPane 组件,在两个卡片页标签上各添加一个按钮组件,选择不同的按钮将打开文件对话框选择要浏览的图像文件或声音文件,选择错误则出现一个信息对话框,消除信息对话框后可重新选择文件。为简单起见,选择的图像文件显示在按钮中,选择的声音文件名也显示在按钮中,同时在声音设备中播放声音。若要继续显示图像或听另一个声音文件,可选择按钮再次打开文件对话框。.
E N D
13.1 程序设计 • 本章根据前面所学的Java语言知识,设计一个简单的图像浏览和播放声音的Java应用程序。 • 程序在一个框架窗口中创建了一个具有两个卡片页标签的JTabbedPane组件,在两个卡片页标签上各添加一个按钮组件,选择不同的按钮将打开文件对话框选择要浏览的图像文件或声音文件,选择错误则出现一个信息对话框,消除信息对话框后可重新选择文件。为简单起见,选择的图像文件显示在按钮中,选择的声音文件名也显示在按钮中,同时在声音设备中播放声音。若要继续显示图像或听另一个声音文件,可选择按钮再次打开文件对话框。 www.AVCEIT.cn
【例13.1】 一个能够浏览图像文件和播放声音文件的Java GUI应用程序。 • // 引入程序需要的包 • import java.io.*; • import java.applet.*; • import java.net.*; • import java.awt.*; • import java.awt.event.*; • import javax.swing.*; • import javax.swing.event.*; • // 定义主类 • public class ImageAndSound{ • public static void main(String args[]){ • new Myis(); • } • } // 主类结束 www.AVCEIT.cn
// 定义继承框架JFrame类的子类Myis,并实现两个监听器接口 • class Myis extends JFrame implements ChangeListener,ActionListener{ • JTabbedPane jt; • JButton jb[]; • int index = 0; • JFileChooser fc; • URL cb; • AudioClip au; • Myis(){ // 构造方法 • super("图像和声音"); // 调用父类的构造方法 • jt = new JTabbedPane(); // 创建JTabbedPane对象 • jb = new JButton[2]; // 创建按钮数组 • fc = new JFileChooser(); // 创建文件选择器 • // 创建按钮对象并注册监听器 www.AVCEIT.cn
jb[0] = new JButton("<html><h1><font color=blue> 请选择图片文件"); • jb[1] = new JButton("<html><h1><font color=blue> 请选择声音文件"); • jb[0].addActionListener(this); • jb[1].addActionListener(this); • // 在JTabbedPane上加入标签页 • jt.addTab("<html><h2><font color=blue> 浏览图片",jb[0]); • jt.addTab("<html><h2><font color=blue> 播放声音",jb[1]); • // 对两个gif文件创建两个ImageIcon对象 • ImageIcon jtim1 = new ImageIcon("images/gifIcon.gif"); • ImageIcon jtim2 = new ImageIcon("images/sound.gif"); www.AVCEIT.cn
// 将图像添加到卡片页标签上 • jt.setIconAt(0,jtim1); • jt.setIconAt(1,jtim2); • // 对JTabbedPane对象注册监听器 • jt.addChangeListener(this); • // 将JTabbedPane对象添加到JFrame的主容器 • // ContentPane上,放在中央 • getContentPane().add(jt,BorderLayout.CENTER); • setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); • // 注册窗口关闭事件 • setSize(400,300); // 设置框架窗口的初始显示大小 • setVisible(true); // 显示框架窗口 • } • // 选择JTabbedPane标签时执行的方法 www.AVCEIT.cn
public void stateChanged(ChangeEvent e){ • if(e.getSource()==jt){ • // 获取标签页序号 • int i = ((JTabbedPane)e.getSource()).getSelectedIndex(); • // 使选择卡片页上的按钮可见,另一卡片页上按钮隐去 • jb[index].setVisible(false); • jb[i].setVisible(true); • index = i; // 记下当前选择的卡片页序号 • } • } • // 选择标签中按钮时执行的方法 • public void actionPerformed(ActionEvent e){ www.AVCEIT.cn
int returnVal = fc.showOpenDialog(Myis.this); • // 打开文件打开对话框 • if (returnVal == JFileChooser.APPROVE_OPTION) { • // 若选择了文件 • File file = fc.getSelectedFile(); • // 用选择的文件创建File类的对象 • String ext = null; • String s = file.getName(); // 获取文件名 • // 在文件名字符串中查找文件名和扩展名间的分隔符 • int i = s.lastIndexOf('.'); • if (i > 0 && i < s.length() - 1) • ext = s.substring(i + 1).toLowerCase(); • // 将文件扩展名转换为小写 • if(index == 0){ • // 若希望打开的是图像文件 www.AVCEIT.cn
// 判断是否为Java支持的图像文件 • if(ext.equals("gif")||ext.equals("jpg")|| • ext.equals("jpeg")){ • // 用图像文件创建ImageIcon对象 • ImageIcon im = new ImageIcon(file.getPath()); • // 在窗口标题上显示提示 • setTitle("文件:"+file.getName()+"->单击图像继续"); • jb[0].setText(""); // 清除按钮上的提示文本 • jb[0].setIcon(im); // 在按钮上显示图像 • }else{ // 若打开文件是Java不支持的图像文件 • // 显示信息对话框 • JOptionPane.showMessageDialog(this, • "打开文件不支持!"); • } www.AVCEIT.cn
}else{ // 若打开的是声音文件 • // 判断是否为Java支持的声音文件 • if(ext.equals("mid")||ext.equals("wav")|| • ext.equals("au")){ • try {// 用声音文件构造URL对象 • cb = new URL("file:"+file.getPath()); • // 用URL对象调用Applet类的newAudioClip()方法 • au = Applet.newAudioClip(cb); • au.play(); // 播放声音文件 • jb[1].setText("<html><h1><font color=blue>您正 在欣赏:"+ file.getName()); • // 更新按钮上的显示文本 • setTitle(“单击按钮继续”); • //在窗口标题上显示提示 • } catch (MalformedURLException em){ // 处理URL异常 • System.err.println(em.getMessage()); • } www.AVCEIT.cn
}else{ // 若不是Java支持的声音文件 • JOptionPane.showMessageDialog( • this, "打开文件不支持!"); • } • } • } • } • } // Myis类结束 • 程序运行的界面如右图所示。 www.AVCEIT.cn
13.2 程序组装与打包 • 一个应用程序开发完成后,通常希望将所有的相关文件组织到一起,以便于携带、分发和管理。在这里,介绍使用JDK工具jar来进行这种操作的方法。工具软件jar可将一个应用程序的实现类和所有资源文件压缩打包,以形成一个jar文件。该jar文件可以用java命令执行,也可在jar的支持下直接运行(不能脱离JDK系统)。 • 下面以例13.1中的Java应用程序来介绍使用工具软件jar将Java应用程序及其相关资源进行打包并运行的方法和步骤。 • 1.用一个任意的文本编辑工具编写一个简单的文件(文件名可自定),以指明应用程序的主类(程序的入口),格式如下: www.AVCEIT.cn
Main-class: 主类名 • 对例13.1可以写为: • Main-class: ImageAndSound • 书写时要注意: (1)主类名前要空一格;(2)程序的入口类名不要带class类型名。 • 假设这一行文本存入到了文件名为manifest(文件名可自定)的文件中。 • 2.在DOS提示符下按照下面的格式输入jar命令: • jar cvmf 文件名1 文件名2.jar 类名或资源文件名1 类名或资源文件名2 … • 其中文件名1是在第一步中建立的文件名(有类型名时要带类型名),文件名2是压缩打包后希望的文件名。最后是一些用空格分隔的希望打入包中的类和资源文件名。若在第一步中对例13.1创建的文件名是manifest,则本步骤可写为: www.AVCEIT.cn
jar cvmf manifest jp.jar ImageAndSound.class Myis.class • 其中jar命令的参数选项有4个:cvmf,它们的意义如下: • c:创建压缩包文件; • v:在打包过程中显示详细信息; • m:要指定manifest(清单)文件(在第一步中创建); • f:要指定jar打包文件。 • 本命令执行时的屏幕显示为: • 标明清单(manifest) • 增加:ImageAndSound.class(读入= 298) (写出= 227)(压缩了 23%) www.AVCEIT.cn
增加:Myis.class(读入= 3725) (写出= 2107)(压缩了 43%) • 3.在正确创建了包文件后,可以用两种方式运行打包以后的Java应用程序。 • (1)用java运行命令运行,格式为: • java –jar 打包文件名.jar • 对前面的例子,可写为: • java –jar jp.jar • (2)在Windows系统界面中直接选择jar打包文件图标。对前面的例子,可直接选择jp.jar文件,就可执行该应用程序了。 • 对jar工具的更进一步使用,可参看JDK系统的帮助文档Jar.html等。 www.AVCEIT.cn