1重庆交通大学信息科学与工程学院综合性设计性实验报告班级:07通信(二)班姓名(学号):实验项目名称:浏览器实验室(中心):信息科学与工程学院软件中心指导教师:王勇实验完成时间:2010年6月30日2目录一、设计题目……………………………….……………….1二、题目分析……………………………….……………….1三、实验条件……………………………….……………….2四、功能模块图…………………………………………….2五、开发过程……………………………….……………….4六、完整源代码…………………………….……………….8七、运行界面……………………………….……………….33八、实验相关问题……………………….……………….36九、设计体会…………………………….……………….39十、参考文献…………………………….……………….403一、设计题目浏览器二、题目分析1.浏览器的功能:该浏览器由一个Java的Application程序来实现,包括:(1)浏览网页,包括网页内部的超链接响应事件,鼠标的响应事件;(2)后退,前进,刷新,主页,转到等按钮的设计;(3)记录历史记录并显示最近浏览的10个网页的历史记录;(4)书签的相应操作,包括:添加书签,删除书签,上移和下移书签;(5)弹出菜单的相关设计;(6)网页源代码的显示;(7)其余的相关设计2.浏览器的基本组件:(1)菜单条:包含文件、标签、查看和帮助四个菜单项;①文件菜单项:包含“退出”子菜单项;②标签菜单项:包含“加入书签”、“删除书签”、“上移书签”、“下移书签”子菜单项;③查看菜单项:包含“源代码”、“历史记录”、“删除记录”、“编码”、“设置背影颜色”子菜单项,其中编码菜单项又包含由各种编码构成的子菜单项;④帮助菜单项包含“关于浏览器”和“每日一句”子菜单项。(2)工具条:包括后退、前进、刷新、主要、转到、五个图标,显示为“Location:”的标签,用于输入和显示URL的文本输入框。(3)主窗口:显示网页的区域,带有垂直滚动条和水平滚动条。(4)提示对话框:显示错误信息和帮助等提示信息。4(5)窗浏窗口下栏:包含显示浏览的网页的URL信息的标签和进度栏。三、实验条件1,硬件:PC机一台2,软件:NetBeansIDE6.8四、功能模块图Browser导航4.1菜单栏的模块设计:5菜单栏jMenuBar1[JMenuBar]文件File[JMenu]退出File_exit[JMenuItem]查看Seek[JMenu]源代码HTML[JMenuItem]历史记录History[JMenu]删除记录History_Del[JMenuItem]编码Code[JMenu]设置背影颜色GroundColor[JMenuItem]记录显示History_Show[JMenuItem]UTF-8UTF8[JMenuItem]……KOI8-UKOI8U[JMenuItem]标签BookMark[JMenu]添加书签BookMark_add[JMenuItem]删除书签BookMark_del[JMenuItem]上移书签BookMarkUp[JMenuItem]下移书签BookMarkDown[JMenuItem]帮助Help[JMenu]关于浏览器About[JMenuItem]每日一句Daily_Sentence[JMenuItem]4.2工具栏的模块设计:工具栏JToolBar1[JToolBar]后退Back[Button]前进Forward[Button]刷新Refresh[Button]主页HomePage[Button]LocationLocation[Jlabel]URL[JTextFiled]转到Go[Button]64.3浏览窗口的模块设计:弹出菜单PopupMenu1[JPopupMenu]添加书签BookMarkAdd[JMenuItem]源文件HTML2[JMenuItem]主页HomePage2[JpopupMenu]刷新Reload[JpopupMenu]退出Exit[JpopupMenu]五、开发过程5.1构建浏览器的设计面板7首先构建浏览器界面,添加菜单栏jMenuBar1[jMenuBar],工具栏jToolBar1[jToolBar],浏览窗口Windows[JEditorPane],以及相关控件。5.2菜单栏的相关设计:5.2.1文件的设计:退出File_exit[JmenuItem]使用System.exit(0)实现浏览器的退出功能;5.2.2添加书签和删除书签的设计思想注:书签上移和书签下移的设计思想与删除书签的设计思想相同添加书签删除书签选择添加书签的菜单项判断bookmarkList是否已添加入此记录中止添加动作将当前URL加入书签设置监听注册动作有无选择删除书签的菜单项选择列表的书签菜单项从书签列表中删除此书签从bookmarkList项中删除此记录添加添加书签子菜单项的事件响应函数:privatevoidBookMark_addActionPerformed(ActionEventevt);删除书签的事件响应函数privatevoidBookMark_DelActionPerformed(ActionEventevt);5.2.2源代码的设计思想5.2.3历史记录的设计思想注:删除记录的设计思想与删除书签的设计思想相同8历史记录通过URL浏览网页删除之前的记录判断URL是否存在histroyList中添加记录到hiatoryList中删除显示记录中最前项判断显示列表中的历史菜单项是否大于10?将记录添加到显示记录中是否是否源代码选择源代码的菜单项创建源文件.txt文件将网页源代码写入txt文件定义缓冲输入流5.3菜单栏的相关设计:5.3.1后退按钮与前进按钮的设计思想9后退按钮按下后退按钮判断当前url在historyList中索引值index是否大于1返回index-1的historyList的记录按钮处于不可用状态更新浏览窗口更改地址栏中的URL是否前进按钮按下前进按钮判断当前url在historyList中索引值index是否最大返回index+1的historyList的记录按钮处于不可用状态更新浏览窗口更改地址栏中的URL是否5.3.2刷新按钮和转动按钮的设计思想按下刷新按钮刷新按钮重新连接到当前的URL更改浏览窗口的内容下载页面是否成功提示错误信息否是转动按钮按下转动按钮从URL[JtextFiled]中得到URL写成标准形式的URL格式更新连接更新浏览窗口的内容将当前的URL加入历史记录提示错误信息是否5.3.3URL[JTextFiled]的设计10添加URL的KeyPressed事件,设定响应函数与转动按钮的事件响应相同,使得达到同样的效果。5.4浏览窗口的相关设计:设计浏览器的窗口Windows[JeditorPane],(1)首先通过定制代码Windows.setEditor(false);将网页置位不可编辑状态,添加WindowsHyperlink事件,并进行网页超链接事件响应相关设计;(2)添加mousePressed事件,进行事件响应相关设计——弹出菜单:在设计面板中添加弹出菜单[JPopupMenu],并在弹出菜单中添加子菜单[JMenuItem],并添加各个子菜单项的事件响应函数,其中,弹出菜单中的各个子菜单项均在菜单栏或工具栏中出现,故弹出菜单的各个子菜单项的事件响应函数中只是进行了调用已存在的按钮或者菜单项的事件响应函数。六、完整源代码/**Browser.java**Createdon2010-6-17,23:30:17*/packagebrowser;importjava.awt.Color;importjava.awt.Cursor;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.io.BufferedInputStream;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStream;importjava.net.MalformedURLException;importjava.net.URL;importjava.net.URLDecoder;importjava.util.ArrayList;importjava.util.logging.Level;importjava.util.logging.Logger;importjavax.swing.JColorChooser;11importjavax.swing.JMenuItem;importjavax.swing.JOptionPane;importjavax.swing.event.HyperlinkEvent;/*@author王敏07950213*/publicclassBrowserextendsjavax.swing.JFrameimplementsActionListener{publicBrowser(){initComponents();setTitle(07级通信工程二班王敏07950213—2010年06月);}@SuppressWarnings(unchecked)//editor-folddefaultstate=collapseddesc=GeneratedCodeprivatevoidinitComponents(){PopupMenu1=newjavax.swing.JPopupMenu();HTML2=newjavax.swing.JMenuItem();BookeMarkAdd=newjavax.swing.JMenuItem();jSeparator9=newjavax.swing.JPopupMenu.Separator();Reload=newjavax.swing.JMenuItem();HomePage2=newjavax.swing.JMenuItem();jSeparator10=newjavax.swing.JPopupMenu.Separator();Exit=newjavax.swing.JMenuItem();jToolBar1=newjavax.swing.JToolBar();Back=newjavax.swing.JButton();Forward=newjavax.swing.JButton();Refresh=newjavax.swing.JButton();HomePage=newjavax.swing.JButton();Location=newjavax.swing.JLabel();URL=newjavax.swing.JTextField();Go=newjavax.swing.JButton();jScrollPane1=newjavax.swing.JScrollPane();Windows=newjavax.swing.JEditorPane();jProgressBar1=newjavax.swing.JProgressBar();Label=newjavax.swing.JLabel();jMenuBar1=newjavax.swing.JMenuBar();File=newjavax.swing.JMenu();File_exit=newjavax.swing.JMenuItem();Seek=newjavax.swing.JMenu();HTML=newjavax.swing.JMenuItem();Separator=newjavax.swing.JPopupM