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

📄 05151858102.java

📁 java记事本
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
package JavaNotepad;

/**
 * version 1.3
 * author skey
 * time 2007-07-02 15:12:00
 * email skey_chen@163.com/skey_chen@126.com
 */
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.undo.UndoManager;

public class notepad
{
	public static void main(String[] args)
	{
		Frame frame = new JavaNotepad();
		frame.setVisible(true);// 显示窗口
	}
}

class JavaNotepad extends JFrame implements ActionListener, MouseListener, UndoableEditListener
{
	// serialVersionUID序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
	private final static long serialVersionUID = 1L;
	JFileChooser jfc = new JFileChooser();
	JScrollPane sp;
	JPanel jp;
	UndoManager undoManger;// 定义出undo/ redo对象
	// 用来判断文件内容是否改变,是否需要存盘
	String s = "";// 打开文件时的内容
	String stemp = "";// 关闭或新建窗体时当前的内容
	int ifsave = -1;// 是否要保存,-1是不用,0是取消,1是要保存
	// 用于本页面查找下一个
	static String findnextstr = "";// 保存查找时用的字符串
	static boolean findnextboolean = false;// 保存查找时是否区分大小写
	static String findnextupdown = "down";// 保存查找时查找的方向
	final JTextArea textarea = new JTextArea();
	JMenuBar menubar = new JMenuBar();
	// **************************************************************************
	// 文件
	JMenu filemenu = new JMenu("文件(F)");
	JMenuItem newitem = new JMenuItem("新建(N)");
	JMenuItem openitem = new JMenuItem("打开(O)...");
	JMenuItem saveitem = new JMenuItem("保存(S)");
	JMenuItem saveasitem = new JMenuItem("另存为(A)...");
	JMenuItem exititem = new JMenuItem("退出(X)");
	// 编辑
	JMenu editmenu = new JMenu("编辑(E)");
	JMenuItem redoitem = new JMenuItem("重做(Y)");
	JMenuItem undoitem = new JMenuItem("撤销(Z)");
	JMenuItem selectitem = new JMenuItem("全选(A)");
	JMenuItem copyitem = new JMenuItem("复制(C)");
	JMenuItem cutitem = new JMenuItem("剪切(T)");
	JMenuItem pasteitem = new JMenuItem("粘贴(P)");
	JMenuItem deleteitem = new JMenuItem("删除(L)");
	JMenuItem finditem = new JMenuItem("查找(F)");
	JMenuItem findnextitem = new JMenuItem("查找下一个(N)");
	JMenuItem replaceitem = new JMenuItem("替换(R)");
	// 格式
	JMenu formatmenu = new JMenu("格式(O)");
	JCheckBoxMenuItem autorowitem = new JCheckBoxMenuItem("自动换行");
	JMenuItem fontitem = new JMenuItem("字体(F)");
	JMenuItem coloritem = new JMenuItem("颜色(C)");
	// 帮助
	JMenu helpmenu = new JMenu("帮助(H)");
	JMenuItem aboutitem = new JMenuItem("关于记事本");
	// 快捷菜单
	JPopupMenu jpm = new JPopupMenu();
	JMenuItem predoitem = new JMenuItem("重做");
	JMenuItem pundoitem = new JMenuItem("撤销");
	JMenuItem pselectitem = new JMenuItem("全选");
	JMenuItem pcopyitem = new JMenuItem("复制");
	JMenuItem pcutitem = new JMenuItem("剪切");
	JMenuItem ppasteitem = new JMenuItem("粘贴");
	JMenuItem pdeleteitem = new JMenuItem("删除");
	// **************************************************************************
	public String filename = null;// 默认的文件名
	Toolkit toolkit = Toolkit.getDefaultToolkit();
	Clipboard clipboard = toolkit.getSystemClipboard();// 剪贴板对象
	// 创建初始颜色为Color.BLACK的JColorChooser对象,为空则为白色
	JColorChooser jColorChooser = new JColorChooser(Color.BLACK);
	private FileDialog openfiledialog = new FileDialog(this, "打开文件", FileDialog.LOAD);
	private FileDialog saveasfiledialog = new FileDialog(this, "保存", FileDialog.SAVE);
	private FileDialog savefiledialog = new FileDialog(this, "是否保存", FileDialog.SAVE);

	public JavaNotepad()
	{
		setTitle("JAVA 记事本");
		// 初始化当前字体:字体为宋体,Font.PLAIN即常规,字体大小为18
		setFont(new Font("宋体", Font.PLAIN, 18));
		// setFont(new Font("Arial",Font.PLAIN,20));
		// setSize(600,450);
		this.setBounds(140, 105, 600, 450);
		// 文件******************************************************************
		filemenu.setMnemonic(KeyEvent.VK_F);// ALT+F键
		// 新建 ---加CTRL+N组合键
		newitem.setMnemonic(KeyEvent.VK_N);
		KeyStroke keynew = KeyStroke.getKeyStroke(KeyEvent.VK_N, Event.CTRL_MASK);
		newitem.setAccelerator(keynew);
		// 打开...---加CTRL+O组合键
		openitem.setMnemonic(KeyEvent.VK_O);
		openitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Event.CTRL_MASK));
		// 保存 ---加CTRL+S组合键
		saveitem.setMnemonic(KeyEvent.VK_S);
		saveitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, Event.CTRL_MASK));
		// 保存 ---加ALT+S组合键
		saveasitem.setMnemonic(KeyEvent.VK_A);
		// 退出 ---加ALT+X组合键
		exititem.setMnemonic(KeyEvent.VK_X);
		// KeyStroke keyexit=KeyStroke.getKeyStroke(KeyEvent.VK_Q,Event.CTRL_MASK);
		// exititem.setAccelerator(keyexit);
		// 为"文件"添加子菜单
		filemenu.add(newitem);
		filemenu.add(openitem);
		filemenu.addSeparator();
		filemenu.add(saveitem);
		filemenu.add(saveasitem);
		filemenu.addSeparator();
		filemenu.add(exititem);
		// 编辑******************************************************************
		editmenu.setMnemonic(KeyEvent.VK_E);// ALT+E键
		// 重做 ---加CTRL+Y组合键
		redoitem.setMnemonic(KeyEvent.VK_Y);
		redoitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, Event.CTRL_MASK));
		// 撤销 ---加CTRL+Z组合键
		undoitem.setMnemonic(KeyEvent.VK_Z);
		undoitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Event.CTRL_MASK));
		// 全选 ---加CTRL+A组合键
		selectitem.setMnemonic(KeyEvent.VK_A);
		selectitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK));
		// /下面三种情况java默认支持,不写也一样/////////////////////////////////
		// 复制 ---加CTRL+C组合键
		copyitem.setMnemonic(KeyEvent.VK_C);
		copyitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, Event.CTRL_MASK));
		// 剪切 ---加CTRL+X组合键
		cutitem.setMnemonic(KeyEvent.VK_X);
		cutitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.CTRL_MASK));
		// 粘贴 ---加CTRL+V组合键
		pasteitem.setMnemonic(KeyEvent.VK_V);
		pasteitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, Event.CTRL_MASK));
		// //////////////////////////////////////////////////////////////////////
		// 删除 ---加DELETE键
		deleteitem.setMnemonic(KeyEvent.VK_DELETE);
		deleteitem.setAccelerator(KeyStroke.getKeyStroke("DELETE"));
		// 查找 ---加CTRL+F键
		finditem.setMnemonic(KeyEvent.VK_F);
		finditem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, Event.CTRL_MASK));
		// 查找下一个 ---加F3键
		findnextitem.setMnemonic(KeyEvent.VK_F3);
		findnextitem.setAccelerator(KeyStroke.getKeyStroke("F3"));
		// 替换 ---加CTRL+R键
		replaceitem.setMnemonic(KeyEvent.VK_R);
		replaceitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, Event.CTRL_MASK));
		// 为"编辑"添加子菜单
		editmenu.add(redoitem);
		editmenu.add(undoitem);
		editmenu.addSeparator();
		editmenu.add(cutitem);
		editmenu.add(copyitem);
		editmenu.add(pasteitem);
		editmenu.add(deleteitem);
		editmenu.addSeparator();
		editmenu.add(selectitem);
		editmenu.addSeparator();
		editmenu.add(finditem);
		editmenu.add(findnextitem);
		editmenu.add(replaceitem);
		// 格式******************************************************************
		formatmenu.setMnemonic(KeyEvent.VK_O);// ALT+O键
		// 自动换行 ---加ALT+W组合键
		autorowitem.setMnemonic(KeyEvent.VK_W);
		// 字体 ---加ALT+F组合键
		fontitem.setMnemonic(KeyEvent.VK_F);
		// 字体颜色 ---加ALT+C组合键
		coloritem.setMnemonic(KeyEvent.VK_C);
		// 为"格式"添加子菜单
		formatmenu.add(autorowitem);
		formatmenu.addSeparator();
		formatmenu.add(fontitem);
		formatmenu.add(coloritem);
		// 帮助******************************************************************
		helpmenu.setMnemonic(KeyEvent.VK_H);// ALT+H键
		// 帮助关于记事本 ---加ALT+H组合键
		aboutitem.setMnemonic(KeyEvent.VK_H);
		// 为"帮助"添加子菜单
		helpmenu.add(aboutitem);
		// ////******************************************************************
		menubar.add(filemenu);
		menubar.add(editmenu);
		menubar.add(formatmenu);
		menubar.add(helpmenu);
		setJMenuBar(menubar);
		// 滚动条****************************************************************
		// 创建一个显示指定组件内容的 JScrollPane
		// 只要组件的内容超过视图大小就会显示水平和垂直滚动条。
		sp = new JScrollPane(textarea);
		// getContentPane().add(textarea);
		jp = new JPanel();
		setContentPane(jp);
		jp.setLayout(new BorderLayout());
		jp.add(sp, BorderLayout.CENTER);
		/**/
		jpm.add(predoitem);
		jpm.add(pundoitem);
		jpm.addSeparator();
		jpm.add(pcutitem);
		jpm.add(pcopyitem);
		jpm.add(ppasteitem);
		jpm.add(pdeleteitem);
		jpm.addSeparator();
		jpm.add(pselectitem);
		textarea.add(jpm);
		textarea.addMouseListener(this);
		textarea.setFont(new Font("宋体", Font.PLAIN, 18));
		newitem.addActionListener(this);
		openitem.addActionListener(this);
		saveitem.addActionListener(this);
		saveasitem.addActionListener(this);
		exititem.addActionListener(this);
		redoitem.addActionListener(this);
		undoitem.addActionListener(this);
		selectitem.addActionListener(this);
		cutitem.addActionListener(this);
		copyitem.addActionListener(this);
		pasteitem.addActionListener(this);
		deleteitem.addActionListener(this);
		finditem.addActionListener(this);
		findnextitem.addActionListener(this);
		replaceitem.addActionListener(this);
		predoitem.addActionListener(this);
		pundoitem.addActionListener(this);
		pcutitem.addActionListener(this);
		pcopyitem.addActionListener(this);
		ppasteitem.addActionListener(this);
		pdeleteitem.addActionListener(this);
		pselectitem.addActionListener(this);
		autorowitem.addActionListener(this);
		fontitem.addActionListener(this);
		coloritem.addActionListener(this);
		aboutitem.addActionListener(this);
		// 设置撤消、重复对象实例
		undoManger = new UndoManager();
		// undoManger.setLimit(5);//设置只能撤消的步数
		textarea.getDocument().addUndoableEditListener(this);
		/* addWindowListener(new windows()); */
		addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				ifsave = tosave();
				if (ifsave == 1)
				{// 如果改变
					saveasfiledialog.setVisible(true);
					filename = saveasfiledialog.getDirectory() + saveasfiledialog.getFile();
					// 没有选择文件
					if ((savefiledialog.getDirectory() == null)
							&& (savefiledialog.getFile() == null))
					{
						filename = null;
					}
					if (filename != null)
					{
						writeFile(filename);
						System.exit(0);
					}
				}
				else if (ifsave == -1)
				{
					System.exit(0);
				}
				else if (ifsave == 0)
				{
				}
			}
		});
	}

	// undo redo 判断是否可用
	public void undoableEditHappened(UndoableEditEvent parm1)
	{
		undoManger.addEdit(parm1.getEdit());
	}

	public void actionPerformed(ActionEvent e)
	{
		Object EventS = e.getSource();
		if (EventS == newitem)
		{// 新建一个记事本
			ifsave = this.tosave();
			if (ifsave == 1)
			{// 如果改变
				savefiledialog.setVisible(true);
				filename = savefiledialog.getDirectory() + savefiledialog.getFile();
				// 没有选择文件
				if ((savefiledialog.getDirectory() == null) && (savefiledialog.getFile() == null))
				{
					filename = null;
				}
				if (filename != null)
				{
					writeFile(filename);
					s = "";// 保存后内容为清空
					filename = null;
					textarea.setText("");
					this.setTitle("新建 JAVA 记事本");
					return;
				}
			}
			else if (ifsave == -1)
			{
				s = "";
				filename = null;
				textarea.setText("");
				this.setTitle("新建 JAVA 记事本");
				return;
			}
			else if (ifsave == 0)
			{
			}
		}
		else if (EventS == openitem)
		{// 打开一个文件
			String ss = filename;// 先保存当前文件名
			stemp = textarea.getText();// 先用字符串保存当前内容
			String ss0 = stemp;// 用字符串保存当前内容
			ifsave = this.tosave();
			if (ifsave == 1 || ifsave == -1)
			{// 如果改变或者不保存
				if (ifsave == 1)
				{// 如果改变
					savefiledialog.setVisible(true);
					filename = savefiledialog.getDirectory() + savefiledialog.getFile();
					if ((savefiledialog.getDirectory() == null)
							&& (savefiledialog.getFile() == null))
					{
						// 没有选择文件
						filename = null;
					}
					if (filename != null)
					{
						writeFile(filename);
						s = stemp;// 保存后内容为保存时的内容
					}
				}
				// 不管是否保存
				openfiledialog.setVisible(true);
				filename = openfiledialog.getDirectory() + openfiledialog.getFile();
				// 没有选择文件
				if ((openfiledialog.getDirectory() == null) && (openfiledialog.getFile() == null))
				{
					filename = null;
				}
				if (filename != null)
				{
					readFile(filename);
					s = textarea.getText();
					this.updates();
				}
				else
				{
					// 复原
					filename = ss;
					textarea.setText(ss0);
					this.updates();
				}
			}
			else if (ifsave == 0)
			{// 取消
			}
		}
		else if (EventS == saveitem)
		{// 保存文件
			if (filename != null)
			{
				writeFile(filename);
				s = textarea.getText();// 保存后内容为保存时的内容
			}
			else
			{
				savefiledialog.setVisible(true);
				filename = savefiledialog.getDirectory() + savefiledialog.getFile();
				// 没有选择文件
				if ((savefiledialog.getDirectory() == null) && (savefiledialog.getFile() == null))
				{
					filename = null;
				}
				if (filename != null)
				{
					writeFile(filename);
					this.updates();
					s = textarea.getText();// 保存后内容为保存时的内容
				}
			}
		}
		else if (EventS == saveasitem)
		{// 另存为
			String ss = filename;// 先保存当前文件名
			saveasfiledialog.setVisible(true);
			filename = saveasfiledialog.getDirectory() + saveasfiledialog.getFile();
			// 没有选择文件
			if ((saveasfiledialog.getDirectory() == null) && (saveasfiledialog.getFile() == null))
			{

⌨️ 快捷键说明

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