JAVA:一个简易的文本编辑器

JAVA:一个简易的文本编辑器献给JAVA的:从接触到喜欢到讨厌到爱Today,我们来做一个JAVA的文本编辑器,使用的基础知识有AWT,I/O流,异常处理,数组,循环,编辑器是EclipseIDE,编译环境为javaSE-10,该文本编辑器有以下九项功能1.可以新建文本文件2.可以进行页面设置3.可以查看帮助内容4.可以删除你所写的5.可以查看当前系统时间6.可以打开文本文件7.可以保存文本文件8.系统会…

JAVA:一个简易的文本编辑器"

献给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添加组件TextArea
		fr.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,把这个流作为参数传递给流InputStreamReader
			FileInputStream 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.txt
		String 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);
	}
	@Override
	public void mouseDragged(MouseEvent e) {
		System.out.println("mouse Dragged");
	}
	@Override
	public void mouseMoved(MouseEvent e) {
	}
}

今天的文章JAVA:一个简易的文本编辑器分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/29244.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注