1、三、原始资料1.面向对象程序设计课程设计指导书2. 耿祥义JAVA大学实用教程北京:清华大学出版社,2009四、要求的设计(调查/论文)成果1.课程设计报告2.课程设计软件五、进程安排布置任务,查找资料、需求分析1天总体设计1天详细设计1.5天编制源程序实现3.5天测试与修改1天撰写课设报告2天六、主要参考资料1 张广彬. Java课程设计案例精编(第二版).北京:清华大学出版社, 2011. 2 耿祥义. Java课程设计(第二版).北京:清华大学出版社, 2008.3 耿祥义JAVA大学实用教程北京:4 邹林达陈国君 Java2程序设计基础北京:清华大学出版社,20105 邹林达Java2
2、程序设计基础实验指导北京:清华大学,2010指导教师(签名): 20 年 月 日目录1需求与总体设计11.1需求分析11.2总体设计思路11.3功能图与类图22详细设计32.1详细设计思路32.2复用组件43编码实现54系统运行与测试214.1系统测试情况214.2排除错误的处理24总 结25 1需求与总体设计1.1需求分析此网页浏览器的主要功能描述:通过在地址栏里面输入URL地址,可以访的网页。除此之外,本案例中的网页浏览器还增添了如下几个功能。1另存为:可以将正在访问的页面进行保存。2前进:访问现有页面的上一个页面。3后退:访问现有页面的下一个页面。4查看源文件:查看访问页面的HTML源文
3、件,并且提供保存功能。1.2总体设计思路网页浏览器的程序由文件WebBrowser.java与ViewSourceFrame.java两个文件组成。1)WebBrowser,java 该文件包含名为WebBrowser的public类,其主要功能为生成网页浏览器的主体框架,实现框架上各个组件的事件侦听。主要包括4个模块:图形用户界面的构建:组件监听接口的实现:文件保存功能的实现:查看源代码框架的生成。 2)ViewSourceFrame.java 该文件包含名为ViewSourceFrame的类,其主要功能是实现了源文件查看的主体框架,并实现了源文件的保存功能。主要包括两个模块:组件监听接口的
4、实现。1.3功能图与类图2详细设计2.1详细设计思路WebBrowser.java文件是网页浏览器的主类文件,生成了网页浏览器的主体框架,并实现框架上各个组件的事件侦听。Pubilic class WebBrowser extends JFrame implements HyperlinkListener,ActtionListener /建立主件,包括地址栏、界面、地址栏、菜单组、菜单项、工具栏、工具栏中按钮组件、存放历史地址、访问顺序。public WebBrowser() /*构造函数,图形化用户界面*/ public void actionPerformed(ActionEvent e
5、) /*实现监听器接口的actionPerformed函数*/void saveFile(final String url)/保存文件 void getHtmlSource (String url)/获得原文件public void hyperlinkUpdate(HyperlinkEvent e)/实现监听器接口的hyperlinkUpdate函数public static void main(String args)/*生成一个IE对象*/ViewSourceFrame.java文件的作用是实现网页浏览器中源文件浏览的主体框架并提供了源文件的保存功能。class ViewSourceFra
6、me extends JFrame implements ActionListener/建立主件 public ViewSourceFrame (String htmlSource) /构造函数,初始化图形用户界面 public void actionPerformed(ActionEvent e)/实现监听器接口的actionPerformed函数2.2复用组件 选择好的容器就是为界面构造一个基本的骨架,然后在其中添加各个组件。组件复用表: 功能所复用的组件菜单组复用JMenu组件菜单项复用JMenuItem组件工具栏复用JPanel组件按钮复用JButton组件地址栏复用JLabel组件状
7、态栏滚动条复用scrollPane组件菜单栏复用JMenuBar组件组件初始化bar=new JToolBar (); /建立工具栏用来显示地址栏jMenuBar1 = new JMenuBar(); /建立菜单栏 fileMenu = new JMenu (文件(F); /建立菜单组对各个菜单项进行初始化saveAsItem = new JMenuItem (另存为(A).exitItem=new JMenuItem (退出(I)backItem=new JMenuItem (后退forwardItem=new JMenuItem (前进fullscreenItem=new JMenuIte
8、m (全屏(U)sourceItem=new JMenuItem (查看源码(C)reloadItem=new JMenuItem (刷新(R)工具栏与菜单栏的初始化过程类似。3编码实现源代码:import java.awt.*;import javax.swing.*;import java.awt.event.*;import javax.swing.event.*;import javax.swing.border.*;import java.io.*;import .*;import java.util.*;public class WebBrowser extends JFrame
9、implements HyperlinkListener,ActionListener /建立工具栏用来显示地址栏 JToolBar bar=new JToolBar (); /建立网页显示界面 JTextField jurl = new JTextField (60); JEditorPane jEditorPane1 = new JEditorPane (); JScrollPane scrollPane = new JScrollPane (jEditorPane1); JFileChooser chooser=new JFileChooser (); JFileChooser choo
10、ser1=new JFileChooser (); String htmlSource; JWindow window = new JWindow (WebBrowser.this); JButton button2=new JButton (窗口还原 Toolkit toolkit = Toolkit.getDefaultToolkit(); /建立菜单栏 JMenuBar jMenuBar1 = new JMenuBar(); /建立菜单组 JMenu fileMenu = new JMenu ( /建立菜单项 JMenuItem saveAsItem = new JMenuItem (
11、JMenuItem exitItem=new JMenuItem ( JMenu editMenu=new JMenu (编辑(E) JMenuItem backItem=new JMenuItem ( JMenuItem forwardItem=new JMenuItem ( JMenu viewMenu=new JMenu (视图(V) JMenuItem fullscreenItem=new JMenuItem ( JMenuItem sourceItem=new JMenuItem ( JMenuItem reloadItem=new JMenuItem ( /建立工具栏 JToolB
12、ar toolBar = new JToolBar(); /建立工具栏中的按钮组件 JButton picSave = new JButton(另存为 JButton picBack = new JButton( JButton picForward = new JButton( JButton picView = new JButton(查看源代码 JButton picExit = new JButton(退出 JLabel label=new JLabel (地址 JButton button=new JButton (转向 Box adress=Box.createHorizontal
13、Box (); /ArrayList对象,用来存放历史地址 private ArrayList history=new ArrayList(); /整型变量,表示历史地址的访问顺序 private int historyIndex; /* *构造函数 *初始化图形用户界面 */ public WebBrowser() setTitle (网页浏览器 setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /为jEditorPane1添加事件侦听 jEditorPane1.addHyperlinkListener
14、(this); /为组件fileMenu设置热键F fileMenu.setMnemonic(F saveAsItem.setMnemonic (S /为“另存为”组件设置快捷键为ctrl+s saveAsItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_S,InputEvent.CTRL_MASK); exitItem.setMnemonic(Q exitItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_E,InputEvent.CTRL_MASK); /将菜单项s
15、aveAsItem加入到菜单组fileMenu中 fileMenu.add (saveAsItem); /在菜单项中添加隔离 fileMenu.addSeparator (); fileMenu.add (exitItem); backItem.setMnemonic (B backItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_Z,InputEvent.CTRL_MASK); forwardItem.setMnemonic(D forwardItem.setAccelerator (KeyStroke.getKeyStroke
16、 (KeyEvent.VK_P,InputEvent.CTRL_MASK); editMenu.setMnemonic(E editMenu.add (backItem); editMenu.add (forwardItem); viewMenu.setMnemonic(V fullscreenItem.setMnemonic(U fullscreenItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_U,InputEvent.CTRL_MASK); sourceItem.setMnemonic(C sourceItem.setAc
17、celerator (KeyStroke.getKeyStroke (KeyEvent.VK_C,InputEvent.CTRL_MASK); reloadItem.setMnemonic(R reloadItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_R,InputEvent.CTRL_MASK); Container contentPane=getContentPane (); /设置大小 scrollPane.setPreferredSize(new Dimension(100,500); contentPane.add
18、(scrollPane, BorderLayout.SOUTH); /在工具栏中添加按钮组件 toolBar.add(picSave); toolBar.addSeparator(); toolBar.add(picBack); toolBar.add(picForward); toolBar.add(picView); toolBar.add(picExit); contentPane.add (bar,BorderLayout.CENTER); contentPane.add(toolBar,BorderLayout.NORTH); viewMenu.add (fullscreenItem
19、); viewMenu.add (sourceItem); viewMenu.addSeparator (); viewMenu.add (reloadItem); jMenuBar1.add (fileMenu); jMenuBar1.add (editMenu); jMenuBar1.add (viewMenu); setJMenuBar (jMenuBar1); adress.add (label); adress.add (jurl); adress.add (button); bar.add (adress); /为组件添加事件监听 saveAsItem.addActionListe
20、ner(this); picSave.addActionListener(this); exitItem.addActionListener(this); picExit.addActionListener(this); backItem.addActionListener(this); picBack.addActionListener(this); forwardItem.addActionListener(this); picForward.addActionListener(this); fullscreenItem.addActionListener(this); sourceIte
21、m.addActionListener(this); picView.addActionListener(this); reloadItem.addActionListener(this); button.addActionListener(this); jurl.addActionListener(this); *实现监听器接口的actionPerformed函数 public void actionPerformed(ActionEvent e) String url = ; /点击转向按钮 if (e.getSource() = button) /获得地址栏的内容 url=jurl.ge
22、tText (); /url不为“”,并且以“http:/”开头 if(url.length ()0&url.startsWith (http:/) try /JEditorPane组件显示url的内容链接 jEditorPane1.setPage (url); /将url的内容添加到ArrayList对象history中 history.add(url); /historyIndex的数值设为history对象的长度-1 historyIndex=history.size()-1; /重新布局 jEditorPane1.setEditable(false); /add by copy editor :) jEditorPane1.revalidate (); catch(Exception ex) /如果链接显示失败,则弹出选择对话框“无法打开该搜索页” JOptionPane.showMessageDialog (WebBrowser.this,无法打开该搜索页,JOptionPane.ERROR_MESSAGE); /url不为“”,并且不以“http: else if(url.length ()!) /在url前面添加“http:/” url=+url; jEditorPane1.setPage (url ); his