`

实现简单的记事本(包括:菜单、快捷功能等)

阅读更多
package Assis;

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import javax.swing.*;

public class Note extends JFrame implements ActionListener {

	private static final long serialVersionUID = 1L;
	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 selectItem = new JMenuItem("全选(A)");
	JMenuItem copyItem = new JMenuItem("复制(C)");
	JMenuItem cutItem = new JMenuItem("剪切(T)");
	JMenuItem pasteItem = new JMenuItem("粘贴(P)");

	/* 格式下拉菜单,字体设置等选项 */
	JMenu formatMenu = new JMenu("格式(O)");
	JMenuItem changeRowItem = new JMenuItem("自动换行(W)...");
	JMenuItem fontItem = new JMenuItem("字体(F)");

	/* 帮助下拉菜单 */
	String fileName = "未命名"; // 设置默认的文件名
	Toolkit toolKit = Toolkit.getDefaultToolkit();
	Clipboard clipBoard = toolKit.getSystemClipboard(); // 剪切板对象 获取系统 Clipboard
	// 的一个实例,该 Clipboard
	// 与本机平台提供的剪贴板工具相互作用。

	/* 打开文件对话框和保存文件对话框 */
	public FileDialog openFileDialog = new FileDialog(this, "Open File",
			FileDialog.LOAD);
	private FileDialog saveAsFileDialog = new FileDialog(this, "Sava File As",
			FileDialog.SAVE);

	public Note() {

		this.setTitle("无标题 - 记事本");
		this.setFont(new Font("Times New Roman", Font.PLAIN, 12));
		this.setBackground(Color.white);// 设置窗口背景颜色
		this.setSize(700, 700); // 设置窗口大小
		this.setJMenuBar(menuBar); // 添加menuBar
		this.add(textArea); // 添加textArea

		/* 在窗口中添加文件其下拉菜单 */
		this.menuBar.add(fileMenu); // 添加"文件"菜单
		this.fileMenu.add(newItem); // 添加"新建"
		this.newItem.setMnemonic('N'); // "新建"快捷键F
		this.fileMenu.addSeparator(); // 将新分隔符追加到菜单的末尾
		this.fileMenu.add(openItem); // 添加"打开"
		this.openItem.setMnemonic('O'); // "打开"快捷键O
		this.fileMenu.addSeparator(); // 将新分隔符追加到菜单的末尾
		this.fileMenu.add(saveItem); // 添加"保存"
		this.saveItem.setMnemonic('S'); // "保存"快捷键S
		this.fileMenu.add(saveAsItem); // 添加"另存为"
		this.saveAsItem.setMnemonic('A'); // "另存为"快捷键A
		this.fileMenu.addSeparator(); // 将新分隔符追加到菜单的末尾
		this.fileMenu.add(exitItem); // 添加"退出"
		this.exitItem.setMnemonic('X');
		this.newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
				InputEvent.CTRL_MASK));
		this.openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
				InputEvent.CTRL_MASK));
		this.saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
				InputEvent.CTRL_MASK));

		/* 在窗口中添加编辑其下拉菜单 */
		this.menuBar.add(editMenu); // 添加"编辑"菜单
		this.editMenu.setMnemonic('E'); // "编辑"快捷键
		this.editMenu.add(copyItem); // 添加"复制"
		this.copyItem.setMnemonic('C'); // "复制"快捷键C
		this.editMenu.add(cutItem); // 添加"剪切"
		this.cutItem.setMnemonic('T'); // "剪切"快捷键T
		this.editMenu.add(pasteItem); // 添加"粘贴"
		this.pasteItem.setMnemonic('P'); // "粘贴"快捷键P
		this.copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
				InputEvent.CTRL_MASK));
		this.cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
				InputEvent.CTRL_MASK));
		this.pasteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
				InputEvent.CTRL_MASK));
		this.menuBar.add(formatMenu);// 添加"格式"
		this.formatMenu.add(changeRowItem); // 添加"自动换行"
		this.formatMenu.add(fontItem); // 添加"字体"

		/* 注册各个菜单项的事件监听器 */
		this.newItem.addActionListener(this);
		this.openItem.addActionListener(this);
		this.saveItem.addActionListener(this);
		this.saveAsItem.addActionListener(this);
		this.exitItem.addActionListener(this);
		this.selectItem.addActionListener(this);
		this.copyItem.addActionListener(this);
		this.cutItem.addActionListener(this);
		this.pasteItem.addActionListener(this);
		this.fontItem.addActionListener(this);

		/* 指定窗口的退出方式 */
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	public void actionPerformed(ActionEvent e) {

		/* 利用事件源判断被点击的菜单项 */
		Object eventSource = e.getSource();

		/* 以下为新建文件 */
		if (eventSource == newItem) {
			textArea.setText("");
			this.setTitle("无标题 - 记事本");
		}

		/* 以下为打开文件 */
		else if (eventSource == openItem) {
			File theOpenFile;
			JFileChooser noteOpenChooser = new JFileChooser();
			int num = noteOpenChooser.showOpenDialog(this);
			if (num == JFileChooser.APPROVE_OPTION) {
				try {
					theOpenFile = noteOpenChooser.getSelectedFile();
					this.setTitle(theOpenFile.getName());
					FileReader noteOpenReader = new FileReader(theOpenFile);
					BufferedReader noteOpenBufferd = new BufferedReader(
							noteOpenReader);
					String noteString;
					while ((noteString = noteOpenBufferd.readLine()) != null) {
						textArea.setText(noteString);
					}
					noteOpenReader.close();
					noteOpenBufferd.close();
				} catch (FileNotFoundException e1) {
					e1.printStackTrace();
				} catch (IOException e2) {
					e2.printStackTrace();
				}
			}
		}

		/* 以下为保存文件 */
		else if (eventSource == saveItem) {
			File newFile = null;
			JFileChooser noteSaveChooser = new JFileChooser(); // 文件资源管理器组件JFileChooser
			int num2 = noteSaveChooser.showSaveDialog(this);
			if (num2 == JFileChooser.APPROVE_OPTION) {
				newFile = noteSaveChooser.getSelectedFile();
				this.setTitle(newFile.getName());
				try {
					FileWriter fw = new FileWriter(newFile);
					BufferedWriter bw = new BufferedWriter(fw);
					bw.write(textArea.getText());
					bw.close();
					fw.close();
				} catch (IOException e2) {
					e2.printStackTrace();
				}
			}
			writeFile(fileName);
		}

		/* 以下为另存文件 */
		else if (eventSource == saveAsItem) {
			this.saveAsFileDialog.setVisible(true); // 显示保存文件的对话框
			fileName = saveAsFileDialog.getDirectory()
					+ saveAsFileDialog.getFile();
			if (fileName != null)
				writeFile(fileName);
		}

		/* 以下为保存全部 */
		else if (eventSource == selectItem) {
			textArea.selectAll(); // 全选
		}

		/* 以下为复制文本 */
		else if (eventSource == copyItem) {
			String text = textArea.getSelectedText(); // 复制
			StringSelection selection = new StringSelection(text);
			clipBoard.setContents(selection, null);
		}

		/* 剪切文本 */
		else if (eventSource == cutItem) {
			String text = textArea.getSelectedText();
			StringSelection selection = new StringSelection(text);
			clipBoard.setContents(selection, null); // 剪切时用空串代替被选字符。
			textArea.replaceRange("", textArea.getSelectionStart(), textArea
					.getSelectionEnd());
		}

		/* 粘贴文本 */
		else if (eventSource == pasteItem) {
			Transferable contents = clipBoard.getContents(this);
			if (contents == null)
				return;
			String text;
			text = "";
			try {
				text = (String) contents
						.getTransferData(DataFlavor.stringFlavor);
			} catch (Exception exception) {
			}
			textArea.replaceRange(text, textArea.getSelectionStart(), textArea
					.getSelectionEnd());
		} else if (eventSource == exitItem) {
			System.exit(0);
		}
	}

	/* 读文件方法 */
	public void readFile(String fileName) {
		try {
			File file = new File(fileName);
			FileReader readIn = new FileReader(file);
			int size = (int) file.length();
			int charsRead = 0;
			char[] content = new char[size];
			while (readIn.ready())
				charsRead += readIn.read(content, charsRead, size - charsRead);
			readIn.close();
			textArea.setText(new String(content, 0, charsRead));
		} catch (IOException e) {
			System.out.println("Error opening File");
		}
	}

	/* 写文件方法 */
	public void writeFile(String fileName) {
		try {
			File file = new File(fileName);
			FileWriter writeOut = new FileWriter(file);
			writeOut.write(textArea.getText());
			writeOut.close();
		} catch (IOException e) {
			System.out.println("Error writing file");
		}
	}

	public static void main(String[] args) {
		Note frame1 = new Note();
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); // 让窗口居中显示
		Dimension frame1Size = frame1.getSize();
		if (frame1Size.height > screenSize.height) {
			frame1Size.height = screenSize.height;
		}
		if (frame1Size.width > screenSize.width) {
			frame1Size.width = screenSize.width;
		}
		frame1.setLocation((screenSize.width - frame1Size.width) / 2,
				(screenSize.height - frame1Size.height) / 2);
		frame1.setVisible(true);
	}
}

 

分享到:
评论

相关推荐

    记事本的设计与功能实现 Java课程设计报告 源代码

    【记事本的设计与功能实现】的Java课程设计报告中,学生通过开发一个基于Java的图形界面记事本应用,深化了对面向对象编程的理解和实际应用能力。这个记事本程序提供了基本的文字编辑功能,如文本编辑、文件管理、...

    用java编写的记事本所有功能都实现demo

    首先,我们要理解Java是如何实现记事本功能的。在Java中,我们可以利用Swing或JavaFX库来创建图形用户界面(GUI),这两个库提供了丰富的组件来构建桌面应用,如按钮、文本框等。在这个记事本Demo中,可能会包含以下...

    第17章简易记事本——工具栏与菜单.ppt

    本章主要关注如何使用Java Swing库来构建简易记事本,包括工具栏、菜单和弹出菜单的实现。这些元素极大地增强了用户体验,使软件更加易于操作。 首先,我们讨论的是工具栏(JToolBar)。工具栏是一种容器,通常位于...

    勾月简易记事本

    菜单栏通常包含“文件”、“编辑”、“查看”等选项,工具栏则提供快捷操作按钮,如新建、打开、保存、剪切、复制、粘贴等。 3. **文件操作**:记事本软件需要支持文件的打开、保存和新建。这需要实现文件的读写...

    Java记事本(带工具栏等)

    这个"Java记事本(带工具栏等)"项目就是一个很好的实例,提供了基本的文本编辑功能,以及设置字体和文件的保存、打开操作。 首先,我们来探讨Java GUI编程的基础,这通常使用Java的Swing或JavaFX库来实现。在这个...

    java多功能记事本

    相较于传统简易记事本,此应用具备更多的实用功能,旨在为用户提供更为丰富的文本处理体验。 #### 二、核心功能模块 1. **文件操作**: - 新建文件(`mFile_New`):创建一个空白文档。 - 打开文件(`mFile_Open`)...

    VB-记事本基本的几个功能

    菜单栏包含“文件”、“编辑”等选项,工具栏则包含常用的快捷按钮,如“新建”、“打开”、“保存”等。 2. **文本编辑控件**: - 在VB中,我们通常使用`RichTextBox`控件作为文本编辑区域。它支持多种文本格式,...

    C#实现记事本完美版

    本项目"**C#实现记事本完美版**"是专为初学者设计的一个学习资源,它提供了完整的源代码,帮助初学者理解如何利用C#来构建一个功能完备的文本编辑器,即我们熟知的“记事本”应用。 首先,让我们深入了解一下C#语言...

    VC6.0下开发的仿windows记事本-达尔魔记事本

    使用VC6.0 MFC开发的基于对话框的VC++...另外还包括右键快捷菜单功能,和主菜单一样实时更新菜单可能状态 利用MFC通用对话框,实现了字体设置功能;并且实现了查看工具栏和状态栏的功能,由于时间有限部分功能尚未实现

    将新建记事本添加到右键菜单中

    ### 如何将新建记事本快捷方式添加至右键菜单 在日常的计算机操作中,我们经常需要快速创建文本文件,然而默认情况下,在Windows系统的右键菜单中,并没有直接创建记事本文件的选项,这无疑增加了我们的操作步骤。...

    基于Winform 编写的记事本

    在本文中,我们将深入探讨如何使用C#编程语言和Windows Forms(Winform)框架来创建一个简单的记事本应用程序。Windows Forms是.NET Framework的一部分,它为开发者提供了构建桌面应用程序的强大工具,而C#则是一种...

    记事本的设计与功能实现Java课程设计报告.doc

    根据提供的文档信息,我们可以深入探讨“记事本的设计与功能实现Java课程设计报告”中的关键知识点和技术细节。本文将从系统需求分析、设计思路、各功能模块的具体实现以及异常处理等方面进行详细介绍。 ### 1. ...

    JAVA实现记事本的源代码

    ### JAVA实现记事本的源代码分析 #### 概述 这段Java代码片段展示了如何创建一个简单的记事本应用程序。该程序旨在模仿Windows系统中的记事本功能,并且已实现大部分基本功能。根据描述,虽然代码中存在一些小错误...

    基于JAVA实现记事本(设计说明书、代码)

    ### 基于JAVA实现记事本(设计说明书、代码)——相关知识点解析 #### 一、项目背景与概述 本项目旨在通过Java语言实现一个类似Windows记事本的功能全面的应用程序。Java作为一种强大的编程语言,以其跨平台、高...

    右键菜单快捷组

    通过双击该文件,可以将其中包含的注册表键值添加到用户的系统注册表中,从而实现添加右键菜单快捷方式的功能。不过,同样需要注意,直接修改注册表有风险,错误的操作可能导致系统出现问题,因此在进行此类操作时应...

    java课程设计简单记事本开发内附完整代码流程图等.pdf

    通过以上分析可以看出,本记事本项目不仅实现了基础的文字编辑功能,还在用户界面和交互方面进行了优化,如提供了多样的字体样式选择、颜色调整选项以及界面风格切换等特色功能。此外,项目还充分考虑了用户的使用...

    win32开发的记事本程序

    这个程序虽然没有实现打印和拖放文件的功能,但它包含了一些基本但至关重要的编辑功能,如查找、替换、转到指定行,以及通过添加工具栏和状态栏来增强用户体验。此外,它还引入了一项新特性——文本颜色功能。 首先...

    java编程 记事本 全部功能都实现.docx

    【Java编程实现记事本程序】 在Java编程中,创建一个类似于Windows系统中的记事本程序是一项基础且实用的任务。这个程序通常会包含文件操作(如新建、打开、保存、打印)、文本编辑(如复制、剪切、粘贴、删除)...

    JAVA记事本项目文档

    在实际实现过程中,该记事本项目还包含了其他辅助功能。例如,菜单栏还包括“格式”、“帮助”和“查看”项,提供了更多的文本格式调整和用户指南。工具栏则提供了快捷图标,用户可以直接通过图标进行相应的操作,如...

Global site tag (gtag.js) - Google Analytics