《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();
        }
实现的接口:ActionListenerKeyListenerMouseMotionListener
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小时内删除。