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

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);
	}
}

 

你可能感兴趣的:(C++,c,swing,C#,F#)