《Java课程设计》记事本
课程设计报告书目录
一、设计课题
二、设计目的
三、操作环境
四、设计场所(机房号、机器号或自己机器)
五、设计过程(设计内容及主要程序模块)
六、本次设计中用到的课程知识点(列出主要知识点)
七、设计过程中遇到的问题及解决办法
八、程序清单
一、设计课题及内容 |
课题名称:记事本 (1)内容:文件菜单中包括新建、打开、保存、另存为、退出等菜单项,其中新建菜单项可以新建一个记事本程序;打开菜单项可以打开一个用户指定的文本文件,并将其内容显示在记事本的文本区域;保存和另存为菜单项可分别实现文件的保存和另存为 (2)编辑菜单主要包括复制、剪切和粘贴等菜单项,可分别实现编辑区文本内容的编辑操作 (3)帮助菜单主要是现实软件版本等信息 (4)记事本还实现了点右键弹出快捷菜单功能,加快文档的编辑效率 (5)记事本文本区引入滚动窗格,实现编辑区的滚动查看 (6)可自行扩充其功能:比如加入格式菜单设置文本的字体等、编辑菜单中加入查、替换等菜单项 |
二、设计目的 |
熟悉java.awt,java.math,java.swing等包中的组件。 掌握图形界面设计方法。 掌握窗体按钮和文本控件对事件的响应。 了解java自带的函数方法。 |
三、操作环境 |
操作系统:Microsoft Windows 10 CPU:Intel Core i5-8300H 2.30GHz 内存:8.00 GB |
四、设计场所 教室b403 |
五、设计过程(设计内容及主要模块,不少于3000字) |
1.设计要求 1) 界面设计 2) 功能实现 (1)文件菜单:新建、打开、保存、另存为、退出等。 (2)其中新建菜单项可以新建一个记事本程序;打开菜单项可以打开一个用户指定的文本文件,并将其内容显示在记事本的文本区域;保存和另存为菜单项可分别实现文件的保存和另存为 3) 编辑菜单:复制、剪切和粘贴等 4) 帮助菜单:软件版本信 5) 右键弹出快捷菜单 2.总体设计 右键快捷 1)功能模块图: 2) 格式 编辑 颜 字体 关于记事本 图一功能模块图 3)功能描述 1、打开记事本。首先是标准型的记事本,拥有文件、编辑。格式和帮助。如图1所示: 图1标准型记事本界面 2、在标准型的记事本界面中,进行的新建一个本件名字叫新记事本。如图2 图2新建记事本功能 3、用打开文件打开刚刚新建的新记事本。如图三所示。 图3—打开文件 4、点击退出即可退出,如图4所示: 图4—退出记事本 5、点击帮助可以看到有关记事本的相关信息,其中有作者名、版本、许可条款、隐私声明等必要信息。如图5所示: 图5—帮助相关信息 6、右键可实现复制、粘贴、剪切、清除等常用功能,方便用户可以快捷方便的使用记事本。如图6所示: 图6—右键功能 7、编辑也可实现制、粘贴、剪切、清除等常用功能,方便用户选择自己适合的方式,自由选择方便的快捷方式使用。如图7: 图7—编辑 3.详细设计 1)流程图如下: 相应的Java类有: Notebook类:主类,添加一些记事本需要的的一些方法,对继承类的一些组件进行实体化,为每个按钮创建“这是什么”的帮助信息,按右键的时候触发什么,输出相应的帮助信息,每件事件进行监听,引用的的软件包和部分代码如下: import java.io.*; import java.awt.event.*; import java.awt.*; import javax.swing.*; import java. swing.*; //功能:提供一组“轻量级”(所有Java语言)组件,尽可能最大程度地在所有平台上工作。 import javax.swing.JFrame; //功能:构造一个初始时不可见的新窗体。 import javax.swing.JPanel; //功能:创建具有双缓冲和流布局的新 JPanel。 import javax.swing.JLabel; //功能:用于短文本字符串或图像或二者的显示区。 import javax.swing.JButton; //功能:创建不带有设置文本或图标的按钮。 import javax.swing.JTextField; //功能:是一个轻量级组件,它允许编辑单行文本。 public class Notebook { JButton b_save,b_close; //按钮 JTextArea textArea; //文本框 File tempFile; //文件 JPanel jp; //面板 JLabel stateBar;//标签 JLabel jl,jj; textArea = new JTextArea(); File f = SelectedFile(); FileReader fr = new FileReader(f); fr.read(ch); String str = new String(ch); textArea.setText(str); tempFile = f; File f = SelectedFile(); //如果没有选取文件,下面的Name(f)将会返回输入的文件名 fname = Name(f); } import java.awt.event.*; //功能:提供处理由 AWT 组件所激发的各类事件的接口和类。 import java.awt.event.ActionListener; //功能:用于接收操作事件的侦听器接口。 import java.awt.event.KeyListener; //功能://功能:用于接收键盘事件(击键)的侦听器接口 import java.awt.event.MouseMotionListener; //功能:用于接收组件上的鼠标移动事件的侦听器接口。 import java.awt.event.WindowListener; //功能:用于接收窗口事件的侦听器接口。 import java.awt.event.TextListener; //功能:用于接收文本事件的侦听器接口。 import java.awt.event.ItemListener //功能:接收项事件的侦听器接口。 //编辑区鼠标事件,点击右键弹出"编辑"菜单 textArea.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { Button() == MouseEvent.BUTTON3) popUpMenu.Component(), e.getX(), e.getY()); } //e.getComponent()和textArea具有同等效果 public void mouseClicked(MouseEvent e){ Button() == MouseEvent.BUTTON1) popUpMenu.setVisible(false); } //为窗口添加"关闭"事件的响应 this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { whenExit(); } }); //响应菜单项"新建"的事件 public void actionPerformed(ActionEvent e) { Source() == f_new) { saveFileDialog(); return; } //响应菜单项"打开"的事件 Source() == f_open){ openFileDialog();} //响应菜单项"保存"和"按钮"保存"的事件 if((e.getSource() == b_save)||(e.getSource() == f_save)) { try{ String str = Text(); java网课推荐 FileWriter fw = new FileWriter(tempFile); fw.write(str); fw.close(); //isCurrentFileExists = true; tempFile = tempFile;} catch(Exception ex){ ex.printStackTrace(); }} //响应菜单"另存为"的事件 Source() == f_saveas){ int option = jfc.showDialog(this,"另存为"); String fname = null; if(option == JFileChooser.APPROVE_OPTION) { File f = SelectedFile();//如果没有选取文件,下面的Name(f)将会返回输入的文件名 fname = Name(f); if(fname != null && im().length() > 0){ dsWith(".txt")) ; else{ fname = at(".txt"); }} if(f.isFile()) fname = f.getName(); f = CurrentDirectory(); f = new Path().concat(File.separator).concat(fname)); try{ f.createNewFile(); String str = Text(); FileWriter fw = new FileWriter(f); fw.write(str); fw.close(); } catch(Exception ex) { ex.printStackTrace(); }}} //响应"退出"菜单和"退出"按钮的事件 if((e.getSource() == f_close)||(e.getSource() == b_close)){ whenExit(); } Source() == e_copy||e.getSource() == je_copy){ copy(); } Source() == e_paste||e.getSource() == je_paste){ paste(); } Source() == e_cut||e.getSource() == je_cut){ cut(); } Source() == e_clear||e.getSource() == je_clear){ clear(); } Source() == e_selectAll||e.getSource() == je_selectAll){ selectAll(); } import java.awt.*; //功能:包含用于创建用户界面和绘制图形图像的所有类。 public interface ActiveEvent //功能:知道如何对自身进行指派的事件的接口。 public class Choice //功能:Choice 类表示一个弹出式选择菜单。 public class Color //功能:用于封装默认 sRGB 颜空间中的颜,或者用于封装由 ColorSpace 标识的任意颜空间中的颜。 public class Menu //功能:对象是从菜单栏部署的下拉式菜单组件。 public Notebook() { jfc.addChoosableFileFilter(new FileNameExtensionFilter("文本文件(*.txt)","txt")); jmb = new JMenuBar(); textArea = new JTextArea(); jsp = new JScrollPane(textArea); file = new JMenu("文件"); edit = new JMenu("编辑"); style = new JMenu("格式"); help = new JMenu("帮助"); je_copy = new JMenuItem("复制(C) "); je_paste = new JMenuItem("粘贴(P) "); je_cut = new JMenuItem("剪切(X) "); je_clear = new JMenuItem("清除(D) "); je_selectAll = new JMenuItem("全选(A) "); je_find = new JMenuItem("查(F) "); je_replace = new JMenuItem("替换(R) "); je_copy.addActionListener(this); //给弹窗式的各组件添加 je_paste.addActionListener(this); je_cut.addActionListener(this); je_clear.addActionListener(this); je_selectAll.addActionListener(this); je_find.addActionListener(this); je_replace.addActionListener(this); //给界面上方的菜单条添加 f_new = new JMenuItem("新建(N)"); f_new.setAccelerator(KeyStroke.getKeyStroke('N',InputEvent.CTRL_MASK,false)); //设置带修饰符快捷键 f_new.addActionListener(this); f_open = new JMenuItem("打开(O)"); f_open.setAccelerator(KeyStroke.getKeyStroke('O',InputEvent.CTRL_MASK,false)); f_open.addActionListener(this); f_save = new JMenuItem("保存(S)"); f_save.setAccelerator(KeyStroke.getKeyStroke('S',InputEvent.CTRL_MASK,false)); f_save.addActionListener(this); f_saveas = new JMenuItem("另存为"); f_saveas.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK|InputEvent.SHIFT_MASK)); f_saveas.addActionListener(this); f_close = new JMenuItem("退出(W)"); f_close.setAccelerator(KeyStroke.getKeyStroke('W',InputEvent.CTRL_MASK,false)); f_close.addActionListener(this); e_copy = new JMenuItem("复制(C)"); e_copy.setAccelerator(KeyStroke.getKeyStroke('C',InputEvent.CTRL_MASK,false)); e_copy.addActionListener(this); e_paste = new JMenuItem("粘贴(V)"); e_paste.setAccelerator(KeyStroke.getKeyStroke('V',InputEvent.CTRL_MASK,false)); e_paste.addActionListener(this); e_cut = new JMenuItem("剪切(X)"); e_cut.setAccelerator(KeyStroke.getKeyStroke('X',InputEvent.CTRL_MASK,false)); e_cut.addActionListener(this); e_clear = new JMenuItem("清除(D)"); e_clear.setAccelerator(KeyStroke.getKeyStroke('D',InputEvent.CTRL_MASK,false)); e_clear.addActionListener(this); e_selectAll = new JMenuItem("全选(A)"); e_selectAll.setAccelerator(KeyStroke.getKeyStroke('A',InputEvent.CTRL_MASK,false)); e_selectAll.addActionListener(this); e_find = new JMenuItem("查(F)"); e_find.setAccelerator(KeyStroke.getKeyStroke('F',InputEvent.CTRL_MASK,false)); e_copy.addActionListener(this); e_replace = new JMenuItem("替换(R)"); e_replace.setAccelerator(KeyStroke.getKeyStroke('R',InputEvent.CTRL_MASK,false)); e_replace.addActionListener(this); s_font = new JMenuItem("字体(T)"); s_font.setAccelerator(KeyStroke.getKeyStroke('T',InputEvent.CTRL_MASK,false)); s_font.addActionListener(this); s_color = new JMenuItem("颜(C)..."); s_color.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK)); s_color.addActionListener(this); h_editor = new JMenuItem("关于记事本"); h_editor.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK)); h_editor.addActionListener(this); h_help = new JMenuItem("帮助信息(H)"); h_help.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I,InputEvent.CTRL_MASK)); h_help.addActionListener(this); //添加右键弹出式菜单 popUpMenu.add(je_copy); popUpMenu.add(je_paste); popUpMenu.add(je_cut); popUpMenu.add(je_clear); popUpMenu.addSeparator(); popUpMenu.add(je_selectAll); popUpMenu.add(je_find); popUpMenu.add(je_replace); } //创建颜选择对话框 Source() == s_color) { Color c = JColorChooser.showDialog(this,"请选择文字颜",Color.cyan); if(c != null){ textArea.setForeground(c); } else textArea.Foreground()); } JFrame类:被继承类的父类,对代码所用到的所以按键、菜单、文本进行定义。 public class Notebook extends JFrame implements ActionListener,ItemListener{ //组件创建 JButton b_save,b_close; //按钮 JTextArea textArea; //文本框 File tempFile; //文件 JPanel jp; //面板 JMenu file,edit,style,help; //菜单 JMenuItem f_new,f_open,f_save,f_close,f_saveas,e_copy,e_paste,e_cut,e_clear,e_selectAll,e_find,e_replace,s_font,s_color,h_editor,h_help; //菜单条 JMenuBar jmb; JScrollPane jsp; //滚动面板 JPopupMenu popUpMenu = new JPopupMenu(); //右键弹出式菜单 JLabel stateBar;//标签 JLabel jl,jj; JFileChooser jfc = new JFileChooser(); //文件选择 JMenuItem je_copy,je_paste,je_cut,je_clear,je_selectAll,je_find,je_replace; //弹出式菜单条 2)所用的部分图形组件的定义: JMenuBar menuBar;//菜单条 Menu editMenu,viewMenu,helpMenu,time_sys;//菜单:编辑、查看、帮助 JMenuItem editMenu_copy,editMenu_paste;//"编辑"的菜单项 JRadioButtonMenuItem viewMenu_standarType; //"查看"的菜单项 JMenuItem helpMenu_helpTopic,helpMenu_aboutCal;//"帮助"的菜单项 JTextField displayField;//文本框 JButton btnBackspace;//按钮 JLabel lblSystemType;//用作边框的标签 JPopupMenu popupMenu;//弹出菜单及菜单项 Container dlgtipscon;//用于显示帮助提示信息的对话框(无边框) 3.定义了组件的初始化以及对界面的排版 1)对总框架的总体布局对主框架的初始化操作(仅给出标准型的 ) this. textArea ("文本框"); //设置部分菜单项的可见性 jp.setVisible(false); file.setVisible(false); edit.setVisible(false); style.setVisible(false); help.setVisible(false); f_new.setVisible(false); f_open.setVisible(false); f_save.setVisible(false); f_close.setVisible(false); f_saveas.setVisible(false); e_copy.setVisible(false); e_paste.setVisible(false); e_cut.setVisible(false); //设置一些组件的可见性 e_clear.setVisible(false); e_selectAll.setVisible(false); e_find.setVisible(false); e_replace.setVisible(false); s_font.setVisible(false); s_color.setVisible(false); h_editor.setVisible(false); h_help.setVisible(false); jmb.setVisible(false); stateBar.setVisible(false); jl.setVisible(false); jj.setVisible(false); je_copy.setVisible(false); je_paste.setVisible(false); je_cut.setVisible(false); je_clear.setVisible(false); je_selectAll.setVisible(false); je_find.setVisible(false); je_replace.setVisible(false); //设置窗口大小和可见性 this.setSize(260,245); this.setVisible(true); } 3)记事本运算部分程序的执行过程: 在该类中,创建监听,响应相应的事件。 public void mouseReleased(MouseEvent e) { Button() == MouseEvent.BUTTON3) popUpMenu.Component(), e.getX(), e.getY()); public void mouseClicked(MouseEvent e){ Button() == MouseEvent.BUTTON1) popUpMenu.setVisible(false); Text().equals("已保存")||Text().equals("新文档")){ return true; } else{ return false; } if(m == JFileChooser.APPROVE_OPTION){ File f = SelectedFile(); for(int i = 0;i <= f.length();i++){ char [] ch = new char[i]; try{ FileReader fr = new FileReader(f); fr.read(ch); String str = new String(ch); textArea.setText(str); tempFile = f; } catch(IOException e){ e.printStackTrace(); }}} else return; } if(options == JFileChooser.APPROVE_OPTION) { File f = SelectedFile(); //如果没有选取文件,下面的Name(f)将会返回输入的文件名 fname = Name(f); if(fname != null && im().length() > 0) { dsWith(".txt")); else { fname = at(".txt"); } Source() == f_new) { saveFileDialog(); return; } Source() == f_open) { openFileDialog(); } Source() == f_saveas) { int option = jfc.showDialog(this,"另存为"); String fname = null; if(option == JFileChooser.APPROVE_OPTION) { File f = SelectedFile();//如果没有选取文件,下面的Name(f)将会返回输入的文件名 fname = Name(f); if(fname != null && im().length() > 0) { dsWith(".txt")) ; else { fname = at(".txt"); } if(c != null) { textArea.setForeground(c); } else textArea.Foreground()); } if((e.getSource() == f_close)||(e.getSource() == b_close)){ whenExit(); } Source() == e_copy||e.getSource() == je_copy){ copy(); } Source() == e_paste||e.getSource() == je_paste){ paste(); } Source() == e_cut||e.getSource() == je_cut){ cut(); } Source() == e_clear||e.getSource() == je_clear){ clear(); } Source() == e_selectAll||e.getSource() == je_selectAll){{ selectAll(); } 实现的接口:ActionListener、KeyListener和MouseMotionListener。 textArea.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { Button() == MouseEvent.BUTTON3) popUpMenu.Component(), e.getX(), e.getY()); } //e.getComponent()和textArea具有同等效果 public void mouseClicked(MouseEvent e){ Button() == MouseEvent.BUTTON1) popUpMenu.setVisible(false); }}); { je_copy.addActionListener(this); //给弹窗式的各组件添加 je_paste.addActionListener(this); je_cut.addActionListener(this); je_clear.addActionListener(this); je_selectAll.addActionListener(this); je_find.addActionListener(this); je_replace.addActionListener(this); } |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论