• 基于Java的模拟写字板的设计与实现


    此系统是使用Java语言实现简易写字板程序,能够进行输入文字操作,并具有新建文件,打开文件,保存文件,退出,复制,粘贴,剪切,全选,撤销等多种基本功能。本系统结构如下:


    (1)菜单栏:
    文件模块:要用于操作整个存储或未保存的文档,包括新建,打开,保存,另存为等功能;
    编辑模块:编辑模块是对文本内容的基本编辑,包括剪切,复制,粘贴,删除等功能;
    格式模块:用于对用户输入内容显示上的操作,包括换行,字体的相关设置等功能;
    帮助模块:帮助菜单是用来展示于写字板有关的一些信息;

    (2)文本区域:
    文本区域主要用来承载用户输入的主要内容;

     2 、主界面实现

    图2.1 写字板程序主界面

    本程序主要是由记事本界面的构造函数,初始化容器的结构,得到组件,并添加事件监听器。容器初始化创建主面板,包括写入内容和菜单栏。

    2.3.2 主模块的代码实现

     1 MenuBar menusBar;//菜单栏
     2 
     3 MenuItem  open,keep,save,newfile,exit_out,about,text_font,colorchoose,back_choose,time_add,key_open,key_save,z_cancel,copy,pa_ste,cut,del,select_all,sear,auto_line;
     4 
     5        Menu fil,edi,forma,help;
     6 
     7 MenuShortcut open_cut,dsave_cut,save_cut,newwork_cut,quit_cut,about_cut,fontchoose_cut,colorchoose_cut,backchoose_cut,timeadd_cut,keyopen_cut,keysave_cut,zcancel_cut,copy_cut,paste_cut,cut_cut,delete_cut,selectall_cut,search_cut,autoline_cut;
     8 
     9        Toolkit tool=this.getToolkit();
    10 
    11        Clipboard clip;//剪贴版
    12 
    13        Image image=tool.getImage("data/icon.jpg");//框架图标
    14 
    15        JTextArea textarea;//文本区域
    16 
    17        JDialog dialog,fontdialog,keydialog,searchdialog;
    18 
    19        JScrollPane listscroll,textscroll;
    20 
    21        GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
    22 
    23        String fontname[]=ge.getAvailableFontFamilyNames();//字体库
    24 
    25        JLabel tip,fonttype,fontsize,searchtip,changetip;//提示
    26 
    27        file_dialog file_dialog;//输入输出对话框
    28 
    29        text text;//存储对象
    30 
    31        String opensource="";
    32 
    33        String texttype="宋体";
    34 
    35        String direct="";//保存路径
    36 
    37        String canceltext="";
    38 
    39        int size=18;//字体大小
    40 
    41        int para=0;//字体粗斜
    42 
    43        Font font=new Font(texttype,Font.PLAIN,size);
    44 
    45        Color fontcolor=Color.black;//字体颜色
    46 
    47        Color backcolor=Color.white;//背景颜色
    48 
    49        Date nowtime;
    50 
    51        char savemode1='s';
    52 
    53        char savemode2='t';//加密保存方式
    54 
    55        public SlNotepad(String title){
    56 
    57               this.setIconImage(image);//图标
    58 
    59               setTitle(title);//标题
    60 
    61               this.setResizable (true);
    62 
    63               this.setBackground (Color.cyan);
    64 
    65               this.setBounds (new Rectangle(150,100,800,550));
    66 
    67               this.addWindowListener(new WindowAdapter(){
    68 
    69                      public void windowClosing(WindowEvent e){
    70 
    71                             System.out.println("程序关闭");
    72 
    73                             System.exit(0);
    74 
    75                             }
    76 
    77             public void windowOpened(WindowEvent e){
    78 
    79                 System.out.println("程序打开");
    80 
    81                 }
    82 
    83             });

    主模块包括菜单栏和文本区域。 菜单栏与JMenu实现,文本字段与文本实现,菜单栏,菜单栏,包括文件,编辑,格式,帮助。

    该程序的主要模块相对简单,易于操作,对计算机硬件配置要求低,体积小,启动快,占地面积小,方便初学者使用,满足人们日常文本的基本处理。

    2.3.3 文件模块的代码实现

     

    图2.2 文件模块代码

        部分代码

     1  public void save(){
     2 
     3        try{
     4 
     5               File_dialog=new file_dialog(this,"保存",file_dialog.SAVE);
     6 
     7               File_dialog.setVisible(true);
     8 
     9 if(file_dialog.getDirectory()!=null && file_dialog.getFile()!=null){
    10 
    11 OutputStreamWriter out=new OutputStreamWriter(new 
    12 
    13 FileOutputStream(file_dialog.getDirectory()+file_dialog.getFile()));
    14 
    15           out.write(textarea.getText());
    16 
    17           out.close();
    18 
    19           opensource=textarea.getText();
    20 
    21           direct=file_dialog.getDirectory()+file_dialog.getFile();
    22 
    23          }
    24 
    25 }catch(Exception e){
    26 
    27        System.out.println("Write error:"+e);
    28 
    29        JOptionPane.showMessageDialog(this,"写入错误",
    30 
    31 "警告",JOptionPane.WARNING_MESSAGE);
    32 
    33     }
    34 
    35  }

        文件模块是写板的菜单栏中的主模块,主要用于操作整个存储或未保存的文档。 包括新建,打开,保存,另存为,启动新菜单以创建新的空文档,打开以打开或在电子文档存储,保存是将编辑后的书写板保存到固定位置,保存为保存编辑的写板 但是内容框可以继续编辑,退出退出WordPad程序。在打开,保存或保存操作时,可以打开,保存或保存各种文档格式,并且可以无格式存储,易于与其他文档转换软件一起使用,文档属性。

    2.3.4 编辑模块的代码实现

     

    图2.3 编辑模块

     

     1   opencut=new MenuShortcut(KeyEvent.VK_O);
     2 
     3             open.setShortcut(opencut);
     4 
     5             dsavecut=new MenuShortcut(KeyEvent.VK_S);
     6 
     7             keep.setShortcut(dsavecut);
     8 
     9             savecut=new MenuShortcut(KeyEvent.VK_L);
    10 
    11             save.setShortcut(savecut);
    12 
    13             quitcut=new MenuShortcut(KeyEvent.VK_Q);
    14 
    15             exit_out.setShortcut(quitcut);
    16 
    17             fontchoosecut=new MenuShortcut(KeyEvent.VK_F);
    18 
    19             text_font.setShortcut(fontchoosecut);
    20 
    21             colorchoosecut=new MenuShortcut(KeyEvent.VK_Y);
    22 
    23             colorchoose.setShortcut(colorchoosecut);
    24 
    25             backchoosecut=new MenuShortcut(KeyEvent.VK_B);
    26 
    27             backchoose.setShortcut(backchoosecut);
    28 
    29             aboutcut=new MenuShortcut(KeyEvent.VK_H);
    30 
    31             about.setShortcut(aboutcut);
    32 
    33             timeaddcut=new MenuShortcut(KeyEvent.VK_F5);
    34 
    35             timeadd.setShortcut(timeaddcut);
    36 
    37             keyopencut=new MenuShortcut(KeyEvent.VK_P);
    38 
    39             keyopen.setShortcut(keyopencut);
    40 
    41             keysavecut=new MenuShortcut(KeyEvent.VK_K);
    42 
    43             keysave.setShortcut(keysavecut);
    44 
    45             copy_cut=new MenuShortcut(KeyEvent.VK_C);
    46 
    47             copy.setShortcut(copy_cut);
    48 
    49             paste_cut=new MenuShortcut(KeyEvent.VK_V);
    50 
    51             paste.setShortcut(paste_cut);
    52 
    53      cut_cut=new MenuShortcut(KeyEvent.VK_X);  

     

    编辑模块是对文本内容的基本编辑,包括剪切,复制,粘贴,删除等。 剪切是所选择的文档并且记录副本被剪切,所选择的文档重复记录,粘贴被剪切或复制记录的文档插入到指定位置,选择文档的所有内容被选择用于编辑操作以方便,删除被选择 去除文本。

    2.4.5 帮助的实现

         

    1   public void about(){//关于
    2 
    3     JOptionPane.showMessageDialog(this,"	写字板
    	写字板这个程序可以帮助人们获得他们需要的信息在大量的文件","关于",JOptionPane.PLAIN_MESSAGE);
    4 
    5        }

    帮助菜单是用来展示于写字板有关的一些信息。

    2.5 程序模块说明

     

    图2.4 流程图

    2.6 程序的相关说明

    写字板的布局分为上下两个:分别是菜单栏和文本输入域。因此,我们首先定义一个JFrame类作为容器的底部来承载其他内容。

    (1)输入区域text。

    (2)模块区域菜单栏。

    (3)如果想完成相对应的功能和需求,就得添加一些事件监听器。 不仅在菜单栏中,单击事件侦听器并侦听输入区域的内容,而且在容器中添加。写字板是在Windows XP系统环境下开发的,使用由JDK提供的Sun和JCreator软件。

    3 程序的详细设计与分析

    3.1 构建菜单栏及其下拉菜单

     1 JMenu files=new JMenu("文件(F)");
     2 
     3        JMenu edit=new JMenu("编辑(E)");
     4 
     5       JMenu formats=new JMenu("格式(O)");
     6 
     7        JMenu scan=new JMenu("查看(V)");
     8 
     9        JMenu help=new JMenu("帮助(H)");
    10 
    11        JMenuItem newFile=new JMenuItem("新建(N)");
    12 
    13        JMenuItem open=new JMenuItem("打开(O)...");
    14 
    15        JMenuItem save=new JMenuItem("保存(S)");
    16 
    17        JMenuItem saveAs=new JMenuItem("另存为(A)...");
    18 
    19        JMenuItem exit=new JMenuItem("退出(X)");
    20 
    21        JMenuItem undo=new JMenuItem("撤销(U)");
    22 
    23        JMenuItem cut=new JMenuItem("剪切(T)");
    24 
    25        JMenuItem paste=new JMenuItem("粘贴(P)");
    26 
    27        JMenuItem selectAll=new JMenuItem("全选(A)");
    28 
    29        JMenuItem timeDate=new JMenuItem("时间/日期(D)");
    30 
    31        JCheckBoxMenuItem lineWrap=new JCheckBoxMenuItem("自动换行(M)");
    32 
    33 JMenuItem about=new JMenuItem("关于写字板  (A)");

        Notepad()方法初始化后构建菜单栏,菜单栏用到JMenu方法实现,菜单栏包括文件,编辑,格式,帮助,文件用file()方法实现,编辑用edit()方法实现,格式用format()方法实现,帮助用help()方法实现。文件模块包括一下几个部分如新建,打开,保存,另存为等。

    3.2 文件事件监听

         

     1   public void valueChanged(ListSelectionEvent e){
     2 
     3               texttype=fontname[fontlist.getSelectedIndex()];
     4 
     5        }
     6 
     7        public void newwork(){
     8 
     9               if(!havesave){
    10 
    11                      Di_alog.setVisible(true);
    12 
    13               }else{
    14 
    15                      textarea.setText("");
    16 
    17                      direct="";
    18 
    19                      canceltext=textarea.getText()
    20 
    21                      }           
    22 
    23               opensource=textarea.getText();
    24 
    25        }

    这个用于实现为文件操作事件监听器打开事件监听器侦听打开文件,当文

    件选择正常打开打开文件时,当文件损坏或不存在时无法打开   

     1 if(e.getSource()==newfile){
     2 
     3        this.judge();
     4 
     5        this.newwork();
     6 
     7 }
     8 
     9 if(e.getSource()==open){
    10 
    11        this.judge();
    12 
    13        this.open();
    14 
    15 }
    16 
    17 if(e.getSource()==keep){
    18 
    19        this.dsave();
    20 
    21 }
    22 
    23 if(e.getSource()==save){
    24 
    25        this.save();
    26 
    27 }
    28 
    29 if(e.getSource()==exit_out){
    30 
    31        this.judge();
    32 
    33        this.quit();
    34 
    35 }
    36 
    37 if(e.getSource()==keyopen){
    38 
    39        this.judge();
    40 
    41        this.keyopen();
    42 
    43 }
    44 
    45 if(e.getSource()==keysave){
    46 
    47        this.keysave();
    48 
    49 }
    50 
    51 if(e.getSource()==zcancel){
    52 
    53        this.zcancel();
    54 
    55 }
    56 
    57 if(e.getSource()==copy){
    58 
    59        this.copy();
    60 
    61 }
    62 
    63 if(e.getSource()==paste){
    64 
    65 this.paste();
    66 
    67 }

        文件事件用于检测模块的文件操作,例如当修改文档未保存时,通过事件监视,发现文档被保留,这提示用户保存文档,以符合退出的安全特性。

    3.3 编辑事件监听

    if(e.getSource()==copy){
    
           this.copy();
    
    }
    
    if(e.getSource()==paste){
    
           this.paste();
    
    }
    
    if(e.getSource()==cut){
    
           this.cut();
    
    }
    
    if(e.getSource()==search){
    
           Sear_chdialog.setVisible (true);
    
    }
    
    if(e.getSource()==searchok){
    
           this.search();
    
    }
    
    if(e.getSource()==searchcancel){
    
           Sear_chdialog. setVisible (false);
    
    }
    
    if(e.getSource()==changeok){
    
           this.change();
    
    }
    
    if(e.getSource()==changeall){
    
           this.changeall();
    
    }
    
    if(e.getSource()==delete){
    
           This.delete ();

        编辑的事件监听器用于监视文档的编辑操作,例如,当文档被复制或剪切时,所选择的文档被记录用于粘贴操作以修改文档。

    3.4 异常处理

    在程序代码的操作中很可能产生异常或异常事件,为了避免这种情况,您需要在程序中使用Java异常处理机制。 在这个程序中运用进行的异常处理机制是try_catch。

    1 try {
    2 
    3        UIM_anager .setLookAndFeel( UIM_anager.getSystemLookAndFeelClassName()
    4 
    5     }catch(Exception e){
    6 
    7              System .out .println(" Read error : "+e);
    8 
    9   JOptionPane.showMessageDialog (this,”读入错误”,"警告",JOptionPane.WARNING_MESSAGE);}

    公众号扫入回复--“java写字板”即可--->获取源码

  • 相关阅读:
    使用Navicat for Oracle新建表空间、用户及权限赋予---来自烂泥
    NonAction与ChildActionOnly
    C# Monitor的Wait和Pulse方法使用详解
    机械键盘简介
    【转载】 中小型研发团队架构实践
    BinaryReader 自己写序列化
    显式接口实现
    AssemblyVersion和AssemblyFileVersion的区别
    自定义设置程序集版本重定向和程序集位置的信息
    单例模式中的属性实现
  • 原文地址:https://www.cnblogs.com/chenqiwei/p/RunWsh_javaWrite.html
Copyright © 2020-2023  润新知