献给JAVA的:从接触到喜欢到讨厌到爱

Today,我们来做一个JAVA的文本编辑器,使用的基础知识有AWT,I/O流,异常处理,数组,循环,编辑器是Eclipse IDE,编译环境为javaSE-10,该文本编辑器有以下九项功能

1.可以新建文本文件
2.可以进行页面设置
3.可以查看帮助内容
4.可以删除你所写的
5.可以查看当前系统时间
6.可以打开文本文件
7.可以保存文本文件
8.系统会监控你在这个编辑器上的所有行为并显示在屏幕上
9.可以计数你所输入的字母和数字的个数

以下是这个文本编译器的源代码,里面有相当丰富的注释内容,这里就不分块解释了

//代码整体布局是
//前面是向容器里添加组件
//中间是为组件添加监听器
//后面是一些功能函数
package Xiti1;
//导入所需的包
import java.util.Calendar;
import java.awt.MenuBar;
import java.awt.Menu;
import java.awt.Frame;
import java.awt.Button;
import java.awt.TextArea;
import java.awt.Dialog;
import java.awt.MenuItem;
import java.awt.Color;
import java.awt.FileDialog;
import java.awt.Label;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.awt.event.MouseMotionListener;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.MouseEvent;
public class OMG2 implements MouseMotionListener,ActionListener{//定义变量private TextArea ta;private String s = "";private String s7="";private String s8="";private Frame fr;private Dialog d;private Button b1; private Button b2;private Button b3; private Button b4; private Calendar cal;private int tongji1;private int tongji2;private char[] shuzu;//构造方法public OMG2() {//从第48行到第94行都是向BorderLayout容器里添加组件Frame fr = new Frame("文本编辑器");TextArea ta = new TextArea();MenuBar mb = new MenuBar();Menu m1 = new Menu("文件");Menu m2 = new Menu("编辑");Menu m3 = new Menu("帮助");Menu m4 = new Menu("工具栏");MenuItem mi1 = new MenuItem("保存");MenuItem mi2 = new MenuItem("新建");MenuItem mi3 = new MenuItem("退出");MenuItem mi4 = new MenuItem("展示帮助文档");MenuItem mi5 = new MenuItem("打开");MenuItem mi6 = new MenuItem("页面设置");MenuItem mi7 = new MenuItem("时间和日期");MenuItem mi8 = new MenuItem("复制");MenuItem mi9 = new MenuItem("粘贴");MenuItem mi10 = new MenuItem("剪贴");MenuItem mi11 = new MenuItem("撤销");MenuItem mi12 = new MenuItem("删除");MenuItem mi13 = new MenuItem("Web工具");MenuItem mi14 = new MenuItem("绘图");MenuItem mi15 = new MenuItem("自定义");MenuItem mi16 = new MenuItem("统计");m1.add(mi1);m1.add(mi2);m1.add(mi5);m1.add(mi3);m1.add(mi6);m2.add(mi7);m2.add(mi8);m2.add(mi9);m2.add(mi10);m2.add(mi11);m2.add(mi12);m2.add(m4);m3.add(mi4);m4.add(mi13);m4.add(mi14);m4.add(mi15);m4.add(mi16);mb.add(m1);mb.add(m2);mb.add(m3);Button b1 = new Button("红色");Button b2 = new Button("黄色");Button b3 = new Button("蓝色");Button b4 = new Button("绿色");//MenuItem,Menu,MenuBar,Frame这三者关系为//MenuItem通常加到Menu里面,Menu必须加到MenuBar里面,MenuBar必须加到Frame里面     fr.setMenuBar(mb);//设置组件TaxtArea为可编辑的ta.setEditable(true);//通过接口为组件TextArea添加鼠标移动监听器ta.addMouseMotionListener(this);//通过事件适配器为组件TextArea添加键盘敲击器ta.addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent e) {System.out.println("key Pressed");}public void keyReleased(KeyEvent e) {System.out.println("key Released");}public void keyTyped(KeyEvent e) {s = s + e.getKeyChar();  }});//为菜单项mi1(保存)添加动作监听器mi1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("您正在保存文件,请稍后");try {//跳转到第294行的baocun()函数baocun();} catch (IOException e1) {e1.printStackTrace();}}});//为菜单项mi2(新建)添加动作监听器mi2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {System.out.println("正在新建文本文件,请稍后");try {//xinjian()函数对应第281行xinjian();} catch (IOException e1) {e1.printStackTrace();}}});//为菜单项mi3(退出)添加动作监听器mi3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {//用户点击这个MenuItem就退出程序System.out.println("您已成功退出");System.exit(1);}});//为菜单项mi4(展示帮助文档)添加动作监听器mi4.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {//向组件TextArea写ta.setText("这是个文本编辑器 \n你可以把你想写的写到下面那个绿色区域\n\n这个文本编辑器的功能有:\n"+"1.可以新建文本文件\n2.可以进行页面设置\n3.可以查看帮助内容\n4.可以删除你所写的\n5.可以查看当前系统时间\n"+"6.可以打开文本文件\n7.可以保存文本文件\n8.系统会监控你在这个编辑器上的所有行为\n9.可以计数你所输入的字母和数字的个数"+"\n\n注意事项\n新建的文本文件的位置在D://自己的软件//66.txt\n这是我自己设置的,你的电脑可能没有这个目录\n"+ "当你获取源代码后请自行修改,否则会引发异常");}});//为菜单项mi5(打开)添加动作监听器mi5.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {try {//跳转函数dakai(),在第257行//该函数返回了一个String类型的值s8 = dakai();//把该函数返回的这个值写到TextArea里ta.setText(s8);} catch (FileNotFoundException e1) {e1.printStackTrace();}}});//为菜单项mi6(页面设置)添加动作监听器mi6.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//跳转函数yemiansheji(),在第315行yemianshezhi();}});//为容器Frame添加窗口监听器fr.addWindowListener(new WindowAdapter() {public void windowOpened(WindowEvent e) {System.out.println("window open");}public void windowClosing(WindowEvent e) {System.exit(1);}public void windowIconified(WindowEvent e) {System.out.println("window Iconified");}public void windowDeiconified(WindowEvent e) {System.out.println("window Deiconified");}public void windowActivated(WindowEvent e) {System.out.println("window Activated");}public void windowDeactivated(WindowEvent e) {System.out.println("window Deactivated");}});//为菜单项mi7(时间和日期)添加动作监听器mi7.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//实例化一个Calendar对象//这个Calendar在java.unit包里,它和系统时间相关Calendar cal = Calendar.getInstance();//获取当前系统的年份int y = cal.get(Calendar.YEAR);//获取当前系统的月份int m = cal.get(Calendar.MONTH);int d = cal.get(Calendar.DATE);int h = cal.get(Calendar.HOUR_OF_DAY);int mi = cal.get(Calendar.MINUTE);int s = cal.get(Calendar.SECOND);String t = "现在时刻是"+y+"年"+m+"月"+d+"日"+h+"时"+mi+"分钟"+s+"秒";ta.setText(t);}});//为菜单项mi12(删除)添加动作监听器mi12.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//删除其实就是用一个空字符串代替你所写的String t1 = "";ta.setText(t1);}            });//为菜单项mi16(统计)统计动作监听器mi16.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//tongji()函数在第238行tongji();ta.setText("你所输入字母的个数是:"+tongji1+"\n你所输入数字的个数是:"+tongji2);}});//向Frame添加组件TextAreafr.add(ta);//设置容器Frame是可见的fr.setVisible(true);//设置容器的左上角的位置和容器本身的大小fr.setBounds(100,100,400,400);}public static void main(String[] args) {OMG2 o = new OMG2();}public void tongji() {//统计用户输入的数字个数和字母个数//现把用户输入的存到数组里char[] shuzu = s.toCharArray();for(int i=0;i<shuzu.length;i++) {//如果是字母if((shuzu[i]<=122)&&(shuzu[i]>=97)) {tongji1 = tongji1 + 1;}//如果是数字if((shuzu[i]>=49)&&(shuzu[i]<=57)) {tongji2 = tongji2 + 1;}}        }//根据你的输入打开一个文本文件public String dakai() throws FileNotFoundException {//使用组件FileDialog,然后使用函数getFile和获取输入的文件名FileDialog fd = new FileDialog(fr,"打开",FileDialog.LOAD);fd.setVisible(true);//如果你没有输入文件名if(fd.getFile()==null) {System.out.println("打开失败");}try {//获取你输入文件名的路径,并将它作为参数传递给流FileInputStream,把这个流作为参数传递给流InputStreamReaderFileInputStream fis1 = new FileInputStream(fd.getDirectory()+fd.getFile());InputStreamReader isr1 = new InputStreamReader(fis1);//定义一个数组,这个数组存了你所输入那个文件的内容char[] cbuf = new char[10];isr1.read(cbuf, 0, 10);for(int j=0;j<10;j++) {s7 = s7 + cbuf[j];}}catch(Exception e) {System.out.println("打开异常");      }//返回你所输入文件里的内容,并显示在TextArea里面return s7;}public void xinjian() throws IOException {//这里我选择在D://自己的软件这个目录下新建一个文本文件66.txtString s = "D://自己的软件";String p = "66.txt";File f = new File(s,p);if(!f.exists()) {//新建文件的专属函数creatNewFile()f.createNewFile();System.out.println("新建成功");System.out.println("新建文本文件的位置:"+f.getPath());}        }//将你在TextArea里面所写的保存到一个文本文件里public void baocun() throws IOException,NullPointerException {FileDialog fd = new FileDialog(fr,"请输入你要保存的文件名",FileDialog.SAVE);System.out.println("你在TextArea里的输入为:"+s);fd.setVisible(true);if(fd.getDirectory()==null) {System.out.println("你没有选择保存位置");}try {FileOutputStream fos = new FileOutputStream(fd.getDirectory() + fd.getFile());OutputStreamWriter osw = new OutputStreamWriter(fos);osw.write(s);osw.flush();osw.close();fos.close();   }catch(Exception e) {System.out.println("保存异常");}finally {System.out.println("您的内容保存到了:"+fd.getDirectory()+fd.getFile());}    }//页面设计设计的是Dialog,你按不同的按钮页面会变成不同的颜色public void yemianshezhi() {Dialog d;d = new Dialog(fr,"页面设置",true);d.setBounds(200,200,400,500);Label l = new Label("设置背景颜色,只需点击对应的按钮即可设置成相应的颜色");Button b1 = new Button("红色");Button b2 = new Button("黄色");Button b3 = new Button("蓝色");Button b4 = new Button("绿色");d.add(l,"North");d.add(b1,"Center");d.add(b2,"East");d.add(b3,"South");d.add(b4,"West");d.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(1);}});b1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {b1.setBackground(Color.RED);}});b2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {b2.setBackground(Color.YELLOW);}});b3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {b3.setBackground(Color.BLUE);}});b4.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {b4.setBackground(Color.GREEN);}});d.setVisible(true);    }public void actionPerformed(ActionEvent e) {System.exit(1);}@Overridepublic void mouseDragged(MouseEvent e) {System.out.println("mouse Dragged");}@Overridepublic void mouseMoved(MouseEvent e) {}
}

JAVA:一个简易的文本编辑器相关推荐

  1. Java实现一个简单的文本编辑器(简易版)

    (用Java做了一个简单的文本编辑器,其中看了很多博主的教学和代码,在这里感谢:@Mark7758.@Kingsly_Liang.@佐敦不下雨.再次感谢!) 1.功能说明: 文件菜单:打开.保存.新建 ...

  2. 用C++实现简易的文本编辑器

    终于开始准备写自己的第一篇博客了,想想现在大二结束了,也要开始准备整理这么久学习的知识.学长们都对我说写博客是对自己知识整理最好的方法,所以我就静下心来把自己的课设写成自己的第一篇博客吧. 废话就不多 ...

  3. python源码编译 带tkinter_python通过Tkinter库实现的一个简单的文本编辑器源码

    下边资料是关于python通过Tkinter库实现的一个简单的文本编辑器的内容. from tkSimpleDialog import askstring from tkFileDialog impo ...

  4. C++程序设计:原理与实践(进阶篇)15.6 实例:一个简单的文本编辑器

    15.6 实例:一个简单的文本编辑器 列表最重要的性质就是可以在不移动元素的情况下对其进行插入或删除操作.下面我们通过一个例子来说明这一点.考虑应该如何在文本编辑器中表示一个文本文件中的字符.所选用的 ...

  5. 如何做一个高级的文本编辑器 textarea,拥有快捷键操作

    如何做一个高级的文本编辑器 textarea,拥有快捷键操作 最近想做一个高级点的 textarea ,支持 JetBrains 系列软件的快捷键,比如: CTRL+ D 复制当前行. Tab 在前面 ...

  6. python通过Tkinter库实现的一个简单的文本编辑器源码

    下边资料是关于python通过Tkinter库实现的一个简单的文本编辑器的内容. from tkSimpleDialog import askstring from tkFileDialog impo ...

  7. 【Qt5开发及实例】16、实现一个简单的文本编辑器(over)

    实现一个简单的文本编辑器 其他具体的代码基础看前面:http://blog.csdn.net/cutter_point/article/details/42839071 1.功能 这个程序又添加了文本 ...

  8. java实现在线富文本编辑器,并传格式数据给后端

    做了一个简易在线的富文本编辑器,前端是html,后台是Java 前端代码: <html lang="en" xmlns:th="http://www.thymele ...

  9. C/C++ 实现一个简单的文本编辑器(windows程序设计)

    一.实现目的 为了更好的学习QT中的窗口.句柄等概念,先对Windows编程进行了大体了解,通过一个简单文本编辑器的实现,来加深对这些基本概念的理解. 二. 基本功能 支持拷贝粘贴 支持文件保存(保存 ...

  10. kindeditor java ssm_easyUI整合富文本编辑器KindEditor详细教程(附源码)

    原因 在今年4月份的时候写过一篇关于easyui整合UEditor的文章Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合,从那 ...

最新文章

  1. 人脸相关2020eccv
  2. Android学习笔记:Activity-ListView
  3. false libhadoop was built without ISA-L support以及编译hadoop本地库失败(没有解决)
  4. 我眼中的ASP.NET Core之微服务
  5. easyui plugin——etreegrid:CRUD Treegrid
  6. python字符串相关习题
  7. cron表达式 每天0点10分和30分_揭开考研阅卷的内幕,注意这些多得20分!
  8. 深度学习相关优化器以及在tensorflow的使用(转)
  9. Vue学习笔记之07-v-for循环遍历
  10. [BZOJ4539][HNOI2016]树(主席树)
  11. 合肥师范学院c语言题库,二级c语言题库
  12. 细说匿名内部类引用方法局部变量时为什么需要声明为final
  13. 合成冷色黑暗恐怖魔法师图片的PS教程
  14. AlertManager 告警信息
  15. 写给大数据初学者的话——转自lxw的大数据田地
  16. java 空clob_CLOB字段在java中操作
  17. 2021第五届蓝帽杯初赛部分题目wp
  18. OC版本的Moya插件网络架构
  19. e3mall Day06
  20. 华为明年手机全面支持鸿蒙系统,华为鸿蒙系统正式开源,余承东:明年华为手机全面支持鸿蒙系统...

热门文章

  1. vue 文字转语音mp3_vue项目或网站上实现文字转换成语音播放功能
  2. matlab qpsk调制程序,qpsk调制与解调系统的matlab实现
  3. C#坦克大战流程设计与源代码(1):基本对象类规划
  4. Vivado使用流程(文字总结)
  5. 为软考准备的论文!!
  6. Unity3d随机数生成
  7. Python3 验证二代身份证号码信息
  8. 网易云Api,轻松获取音乐数据
  9. IDEA------自动导包快捷键
  10. 基于单片机的人体心率脉搏检测系统