《第7章程序设计案例分析.ppt》由会员分享,可在线阅读,更多相关《第7章程序设计案例分析.ppt(18页珍藏版)》请在三一文库上搜索。
1、第七章 程序设计案例分析,Java为我们设计图形界面应用程序提供了丰富的GUI组件,但是Java图形界面应用程序的设计仍然比较复杂。本章我们配合这章内容将介绍一个设计案例单词赢家软件。通过剖析和研究该应用程序的设计过程,我们不仅可以对窗体、菜单、组件、事件、布局等的设计有一个感性的综合的了解,还可以掌握使用开发工具(NetBeans IDE)完成开发项目的一般过程和方法,积累实际编程经验。,7.1 可视化程序设计与NetBeans IDE,可视化程序设计是基于图形用户界面(GUI)和可视化组件的一种快速应用开发(RAD)方法;可视化程序设计可以根据用户需求快速建立原型,验证并实现用户需求;并通
2、过所见即所得的开发提高编程工作的效率。 Java有一些优秀的可视化编程工具提供了功能有限的可视化程序设计开发环境,但目前Java程序设计无法完全依赖于可视化编程工具的支持,仍然有很多工作需要手工编程来完成。 NetBeans IDE提供了一些工具,可帮助我们以可视化方式设计和生成Java窗体,简化图形用户界面的设计过程,这些工具包括窗体编辑器、检查器窗口、组件面板窗口、属性窗口、连接向导。,7.1 可视化程序设计与NetBeans IDE,窗体编辑器,检查器窗口,组件面板窗口,属性窗口,项目窗口,使用NetBeans IDE在窗体编辑器“设计”视图中处理某个窗体时,将自动生成代码,并在“源”视
3、图中以蓝色背景显示这些代码。此代码称为“受保护文本”,不能直接对其进行编辑。,7.2 设计窗体,Java应用程序的窗体包括:用作顶层窗体的框架窗体(JFrame);用于放置内容的面板窗体(JPanel);用于用户交互的对话框窗体(JDialog)等。设计窗体除了要设计窗体中的GUI组件和布局外,还要设计相关的事件处理程序。 在NetBeans IDE中,可以利用新建文件向导创建具有选定类型的空白窗体,并获得系统生成的基本代码。,7.2.1 创建主窗体和主面板,在NetBeans IDE中创建新窗体的步骤如下: 从主菜单中选择菜单项:“文件-新建文件”。 在“新建文件”向导中展开“Java GU
4、I窗体”节点,然后选择一个窗体模板“JFrame窗体”,然后单击下一步。 在 “新建JFrame窗体”向导中输入新建窗体的名称和位置。然后单击完成。 NetBeans IDE将创建具有选定类型的空白窗体,并在“编辑器”标签的“设计”视图中打开该窗体。,7.2.2 组件与布局设计,在NetBeans IDE可视化设计时,使用“组件面板”窗口、窗体编辑器或“检查器”窗口来添加组件并更改大多数容器的布局。 可以先利用AbsoluteLayout布局设计好程序界面,然后再将容器的绝对布局转化成合适的相对布局。如果容器中的GUI元素比较复杂,则可以转化为功能强大的GridBagLayout布局。,7.2
5、.3 添加事件,在NetBeans IDE可视化设计时,可以使用组件的“属性”窗口或上下文菜单添加事件,定义事件处理程序。系统将自动生成事件监听器的代码和处理程序方法的空主体。 我们可以使用组件的“属性”窗口或上下文菜单定义事件处理程序。使用“属性”窗口定义事件处理程序的步骤如下(以startButton的Action事件为例): 在“检查器”窗口中选择组件startButton,然后在“属性”窗口中单击“事件”。 在列表中单击所需事件的值actionPerformed。初始时,所有事件的值均为。当单击值字段时,将替换为缺省事件名。 在属性表单中,键入所需的处理程序名称并按Enter键,或者直
6、接按Enter键以使用缺省处理程序名称。如果未按Enter键,将不生成任何代码。也可以单击事件的省略号(.) 按钮以显示“处理程序”对话框。单击“添加”按钮,将新的名称testWord添加到处理程序列表中,然后单击“确定”。 此时系统自动生成事件监听器的代码和处理程序方法的空主体 。,选择要添加的事件处理程序,/自动生成事件监听器的代码(不可编辑) startButton.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt
7、) testWord(evt); /处理程序方法的空主体(方法头不可编辑,但是方法体可编辑) private void testWord(java.awt.event.ActionEvent evt) / TODO 将在此处添加您的处理代码: ,7.3 设计菜单和对话框,设计菜单和对话框是图形界面应用程序的最常见特征,菜单可以用于调用不同的程序操作模块,而通过对话框则可完成特定的设置或操作任务。,7.3.1 设计菜单,手工创建菜单时,需要先创建菜单项对象(JMenuItem的实例)、菜单对象(JMenu的实例)、菜单栏对象(JMenuBar的实例)。然后把菜单项对象添加到菜单对象中;把菜单对象
8、添加到菜单栏对象中。最后使用setJMenuBar方法,为那个能使用菜单的容器组件添加完整的主菜单栏。使用NetBeans IDE在窗体编辑器中可视化设计菜单。 使用NetBeans IDE在窗体编辑器中可视化设计菜单,使得编写菜单程序颇为简单。具体步骤如下: 首先在窗体编辑器中创建菜单栏 然后将菜单添加到菜单栏中 接着是添加菜单项 最后为菜单项添加事件,private void initComponents() . . menuItemExit.addActionListener(new java.awt.event.ActionListener() public void actionPe
9、rformed(java.awt.event.ActionEvent evt) menuItemExitActionPerformed(evt); . . ); private void menuItemExitActionPerformed(java.awt.event.ActionEvent evt) exit();/用户添加的代码 ,7.3.2 设计对话框,对话框根据其显示模式分为模态对话框和非模态对话框。模态对话框在用户处理它之前不允许用户同应用程序的主窗口进行交互。非模态对话框允许用户同时在该对话框和程序其他窗体中切换操作,而不用关闭该对话框。 Java类库中现成的专用对话框包括:用
10、于显示消息的选项对话框(JOptionPane),以及一些标准对话框,如:文件选择对话框(JFileChooser)、颜色选择对话框(JColorChooser)。 选项对话框JOptionPane是典型的模态对话框。JOptionPane有四个静态方法来显示不同类型的消息,它们是:showMessageDialog、showConfirmDialog、showOptionDialog、showInputDialog。 private void exit() int selection=JOptionPane.showConfirmDialog(this,“是否立即退出系统?“,“操作提示“,
11、 JOptionPane.OK_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE); if (selection=JOptionPane.OK_OPTION) System.exit(0); ,利用文件选择对话框JFileChooser打开文件,文件选择对话框(JFileChooser),可以允许用户通过一个图形化文件系统浏览程序访问文件系统,打开(调用showOpenDialog方法)或保存(调用showSaveDialog方法)一个文件。 public void open() int choice; JFileChooser jfc = new JFile
12、Chooser(); jfc.setSize( 400,300 ); choice = jfc.showOpenDialog( this ); if ( choice = JFileChooser.APPROVE_OPTION ) String fileName = jfc.getSelectedFile().getAbsolutePath(); loadWords(fileName); ,自定义对话框是继承自JDialog基类,并由程序员自己设计的对话框。 setupDialog=new SetUpDialog (null); setupDialog.setVisible(true);,7.
13、4 设计算法,在单词赢家软件中,要求程序能够从词库文件中解析出单词的中英文对照字符串,并将50个词汇一组生成一个供测试的单词组。用户一次进行一组词汇的英译中或中译英的选择题测试。其核心的算法涉及: 如何从词库文件中解析出单词的中英文对照字符串,并生成测试单词组。其中包括了顺序生成和随机生成50个测试词汇。 如何产生测试选择题的4个选项,其中要求正确答案的ABCD位置随机变化以及随机生成另外3个用于干扰的假答案。 如何在图形界面上实现用户交互,完成答题过程。,打开字库文件,public void open() int choice; JFileChooser jfc = new JFileCho
14、oser(); jfc.setSize( 400,300 ); choice = jfc.showOpenDialog( this ); if ( choice = JFileChooser.APPROVE_OPTION ) String fileName = jfc.getSelectedFile().getAbsolutePath(); loadWords(fileName); ,读入并将词库文件转换为中英文单词列表,public void loadWords(String wordfileName) try Reader dataReader=new FileReader(wordfil
15、eName); BufferedReader inStream= new BufferedReader(dataReader); / 打开文件流 String line = inStream.readLine(); / 读文件中的一行 while (line != null) /将英中词汇对解析成英文、中文单词 /例如:“love=vt.爱“ 解析成: “love“和“爱 “ int posColon=line.indexOf(=); if (posColon0) String e=line.substring(0,posColon).trim(); String c=line.substri
16、ng(posColon+1).trim(); wordsEnglish.add(e) ; wordsChinese.add(c) ; line = inStream.readLine(); / 读下一行 inStream.close(); / 关闭文件流 catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); total=wordsEnglish.size(); groupCount=total/50;/50个单词分为一组 ,/生成试题迭代器it1和答案迭代器
17、it2 private void makeTestList() java.util.List chosenList1=wordsEnglish; java.util.List chosenList2=wordsChinese; testList.clear(); keyList.clear(); if (option=1) chosenList1=wordsChinese; chosenList2=wordsEnglish; if (mode=0) /产生随机测试单词 for (int i=0;i(total-1) ) return; testList.add(chosenList1.get(
18、s); keyList.add(chosenList2.get(s); ; it1=testList.listIterator(); it2=keyList.listIterator(); score=0;/计分归0 ,/产生答案选项 private void makeKeys() String keyToWord=(String)(it2.next(); /随机产生假答案 for (int i=0;i4;i+) int r=(int)(Math.random()*total); if (option=0) keyi=(String)(wordsChinese.get(r); else key
19、i=(String)(wordsEnglish.get(r); /如果随机产生的假答案刚好与真答案相同,则重来。 if (keyi=keyToWord) i-; /随机产生真答案的位置 keyPosition=(int)(Math.random()*4); keykeyPosition=keyToWord; /显示答案选择项 keyA.setText(“A. “+key0); keyB.setText(“B. “+key1); keyC.setText(“C. “+key2); keyD.setText(“D. “+key3); ;,7.5 完成和部署应用程序,完成WordWinner应用程序 。 MainForm.java文件,MainForm类 MainPanel.java文件,MainPanel类 SetUpDialog.java文件,SetUpDialog类 打包Java应用程序 在NetBeans IDE中生成 JAR 文件 部署和运行Java应用程序,java -jar WordWinner.jar,
链接地址:https://www.31doc.com/p-2070713.html