⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 notebook4.java

📁 一个java语言编译的记事本 的源代码 完全模拟windows下的Notepad程序
💻 JAVA
字号:
import java.awt.*; //导入抽象窗口工具集包(abstract window toolkit)
import java.awt.event.*; //导入窗口事件工具包
import java.io.*; //导入输入输出工具包
import java.awt.datatransfer.*; //导入数据转化工具包

//菜单工具条类(添加菜单项,子菜单)
class MyMenuBar extends MenuBar { // MyMenuBar类继承MenuBar类(类方法)
	public MyMenuBar(Frame parent) { // 构造函数
		parent.setMenuBar(this); // 向parent添加自身
	}

	public void addMenus(String[] menus) { // 菜单条下添加菜单项
		for (int i = 0; i < menus.length; i++)
			add(new Menu(menus[i]));
	}

	public void addMenuItems(int menuNumber, String[] items) { // 菜单添加(类方法)
		for (int i = 0; i < items.length; i++) { // 循环0~menus.length-1次
			if (items[i] != null) // 向各个菜单项添加子菜单
				getMenu(menuNumber).add(new MenuItem(items[i]));
			else
				getMenu(menuNumber).addSeparator();
		}
	}

	public void addActionListener(ActionListener a1) {// 注册所有动作监听对象(类方法)
		for (int i = 0; i < getMenuCount(); i++)
			// 循环到菜第i个菜单数
			for (int j = 0; j < getMenu(i).getItemCount(); j++)
				// 向第i个菜单的第j个子菜单注册动作事件监听
				getMenu(i).getItem(j).addActionListener(a1);
	}
}

// 文件管理类(处理文件的打开,保存等,拥有文件对话框成员)
class MyFile { // MyFile类定义
	private FileDialog fDlg; // 声明一个文件对话框(类成员)

	public MyFile(Frame parent) { // 构造函数(类方法)
		fDlg = new FileDialog(parent, "", FileDialog.LOAD);// 初始化文件对话框
	}

	private String getPath() { // (类方法)
		return fDlg.getDirectory() + "\\" + fDlg.getFile(); // 返回选中文件的路径
	}

	public String getData() throws IOException {
		fDlg.setTitle("打开"); // 设定文件对话框的标题为"打开"
		fDlg.setMode(FileDialog.LOAD); // 将文件对话框的模式设定为打开模式
		fDlg.setVisible(true); // 显示文件对话框

		// 读取文件对话框选中的文件的内容并将其返回
		BufferedReader br = new BufferedReader(new FileReader(getPath()));
		StringBuffer sb = new StringBuffer();
		String aline;
		while ((aline = br.readLine()) != null)
			sb.append(aline + '\n');
		br.close();
		return sb.toString();
	}

	public void setData(String data) throws IOException {
		// 显示保存模式对话框,并将数据data存入选中的文件中
		fDlg.setTitle("保存");
		fDlg.setMode(FileDialog.LOAD);
		fDlg.setVisible(true);
		BufferedWriter bw = new BufferedWriter(new FileWriter(getPath()));
		bw.write(data);
		bw.close();
	}
}

// 文本管理类(提供记事本的剪贴,复制,粘贴等功能)
class MyClipboard { // 获取系统剪贴板
	private Clipboard cb; // 声明剪贴板对象

	public MyClipboard() { // 构造函数,获取系统剪贴板
		cb = Toolkit.getDefaultToolkit().getSystemClipboard();
	}

	public void setData(String data) { // 将字符串存入剪贴板
		cb.setContents(new StringSelection(data), null);
	}

	public String getData() { // 从剪贴板读取数据,并将其返回
		Transferable content = cb.getContents(null);
		try {
			return (String) content.getTransferData(DataFlavor.stringFlavor);
		} catch (Exception ue) {
		}
		return null;
	}
}

// 查找替换类(用于查找TextArea中特定字符串功能,并替换特定字符串
class MyFindDialog extends Dialog implements ActionListener {
	private Label lFind = new Label("查找字符串");

	private Label lReplace = new Label("替换字符串");

	private TextField tFind = new TextField(10); // 接受待查字符串TextField

	private TextField tReplace = new TextField(10); // 接受要替换字符串TextField

	private Button bFind = new Button("查找"); // 创建查找按钮

	private Button bReplace = new Button("替换"); // 替换按钮

	private TextArea ta; // ta为含有待查字符串的TextField

	public MyFindDialog(Frame owner, TextArea ta) { // 构造函数
		super(owner, "查找", false); // 非模式对话框
		this.ta = ta;
		setLayout(null); // 将Layout设为null

		// 设定组件的位置大小(横坐标,纵坐标,高,宽)
		lFind.setBounds(10, 30, 80, 20);
		lReplace.setBounds(10, 70, 80, 20);
		tFind.setBounds(90, 30, 90, 20);
		tReplace.setBounds(90, 70, 90, 20);
		bFind.setBounds(190, 30, 80, 20);
		bReplace.setBounds(190, 70, 80, 20);

		add(lFind); // 添加各个组件
		add(tFind);
		add(bFind);
		add(lReplace);
		add(tReplace);
		add(bReplace);

		setResizable(false); // 禁止用户更改对话框大小
		bFind.addActionListener(this); // 为bFind添加监听对象
		addWindowListener(new WindowAdapter() { // 为对话框注册关闭窗口事件监听器
			public void windowClosing(WindowEvent e) {
				MyFindDialog.this.dispose();
			}
		});
	}

	public void showFind() {
		setTitle("查找"); // 将对话框标题设为"查找"
		setSize(280, 60); // 将对话框设定为合适大小
		setVisible(true);
	}

	public void showReplace() {
		setTitle("查找替换"); // 标题:"查找替换"
		setSize(280, 110); // 设定大小
		setVisible(true);
	}

	private void find() { // 查询方法
		String text = ta.getText(); // 从ta中获取字符串,并存入text中
		String str = tFind.getText(); // 获取tFind字符串,并存入text中
		int end = text.length(); // 获取ta字符串的长度
		int len = str.length(); // 获取tFind字符串的长度
		int start = ta.getSelectionEnd(); // 从关标位置开始查找字符串
		if (start == end)
			start = 0; // 若关标位于末尾,则从头开始查找
		for (; start <= end - len; start++) {
			if (text.substring(start, start + len).equals(str)) {// 若找到查找字符串
				ta.setSelectionStart(start); // 选中并显示字符串
				ta.setSelectionEnd(start + len);
				return; // 退出方法
			}
		}

		ta.setSelectionStart(end); // 若找不到待查字符串,则将光标置于末尾
		ta.setSelectionEnd(end);
	}

	private void replace() { // 替换方法
		String str = tReplace.getText(); // 获取待查字符串
		if (ta.getSelectedText().equals(tFind.getText())) // 若相同则替换
			ta.replaceRange(str, ta.getSelectionStart(), ta.getSelectionEnd()); // 若不同则继续查找
		else
			find();
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == bFind) // 按下"查找"按钮,调用find()方法
			find();
		else if (e.getSource() == bReplace) // 按下"替换"按钮,调用replace()方法
			replace();
	}
}

public class NoteBook4 extends Frame implements ActionListener {

	private TextArea editor = new TextArea(); // 创建文本编辑区

	private MyFile mf = new MyFile(this); // 创建文件

	private MyClipboard cb = new MyClipboard(); // 创建剪贴板

	private MyFindDialog findDlg = new MyFindDialog(this, editor);// 创建查找对话框

	public NoteBook4(String title) {
		// 构造函数,调用父类的构造函数设定标题
		super(title);

		// 创建菜单条
		MyMenuBar mb = new MyMenuBar(this);

		// 向菜单条中菜单添加文件,编辑,查找,帮助4个菜单项
		mb.addMenus(new String[] { "文件", "编辑", "查找", "帮助" });

		// 向每个菜单添项加子菜单
		mb.addMenuItems(0, new String[] { "新建", "打开", "保存", "退出" });
		mb.addMenuItems(1,
				new String[] { "剪贴", "复制", "粘贴", "清除", "全选" });
		mb.addMenuItems(2, new String[] { "查找", "查找替换" });
		mb.addMenuItems(3, new String[] { "我的记事本信息" });

		add(editor);
		mb.addActionListener(this);

		addWindowListener(new WindowAdapter() { // 关闭"记事本"代码
			public void windowClosing(WindowEvent e) {
				NoteBook4.this.dispose();
			}
		});
	}

	public void actionPerformed(ActionEvent e) { // 事件执行方法
		String selected = e.getActionCommand(); // 获取命令
		if (selected.equals("新建")) // 执行"新建"命令
			editor.setText("");
		else if (selected.equals("打开")) { // 执行"打开"命令
			try { // 可能出现异常
				editor.setText(mf.getData());
			} catch (IOException ie) {
			}
		} else if (selected.equals("保存")) { // 执行"保存"命令
			try { // 可能出现异常
				mf.setData(editor.getText());
			} catch (IOException ie) {
			}
		} else if (selected.equals("退出")) { // 执行"退出"命令
			dispose();
		} else if (selected.equals("剪贴")) { // 执行"剪贴"命令
			cb.setData(editor.getSelectedText());
			editor.replaceRange("", editor.getSelectionStart(), editor
					.getSelectionEnd());
		} else if (selected.equals("复制")) { // 执行"复制"命令
			cb.setData(editor.getSelectedText());
		} else if (selected.equals("粘贴")) { // 执行"粘贴"命令
			String str = cb.getData();
			editor.replaceRange(str, editor.getSelectionStart(), editor
					.getSelectionEnd());
		} else if (selected.equals("清除")) { // 执行"清除"命令
			editor.replaceRange("", editor.getSelectionStart(), editor
					.getSelectionEnd());
		} else if (selected.equals("全选")) { // 执行"全选"命令
			editor.setSelectionStart(0);
			editor.setSelectionEnd(editor.getText().length());
		} else if (selected.equals("查找")) { // 执行"查找"命令
			findDlg.showReplace();
		} else if (selected.equals("查找替换")) { // 执行"查找替换"命令
			findDlg.showReplace();
		}
	}

	public static void main(String[] args) { // 主函数体

		NoteBook4 memo = new NoteBook4("我的记事本"); // 创建我的记事本
		memo.setSize(300, 300); // 大小宽300,高300
		memo.setVisible(true); // 显示窗口
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -