特别声明: 本文摘自互联网,在整理的同时,尽量保持原作者的相关信息,在此衷心希望原作者光临寒舍,以便能正确指出本文出处。最后非常感谢原作者的奉献。

java_GUI_记事本编辑器_Web

效果图

源代码:

/**  
作者:wwj  
日期:2012/4/18  
功能:利用图像用户界面高级组件实现简单记事本编辑器;
 
说明:  
(1)创建名为“简单记事本”窗口,在窗口中添加一带有滚动条的文本区。  
(2)在窗口中添加一个具有以下菜单的菜单栏:  
   1.“文件”菜单,包含“打开”、“保存”、“退出”的菜单项,菜单间加分隔线,  
      添加事件处理方法,使菜单具有打开、保存文件及退出的功能。  
   2.“编辑”菜单,包含“复制”、“剪切”、“粘贴”的菜单项,添加事件处理方法。
   3.“格式”菜单,包含“格式设置”的二级子菜单;而二级“格式设置”子菜单,  
      包含 “自动换行”、“取消自动换行”、“断行不断字”、“取消断行不断字”的菜单项,添加事件处理方法。
    (提示:JTextArea类中,使用setLineWrap(true)方法设置自动换行,使用setWrapStyleword(true)方法设置断行不断字。  
(3)在窗口中添加工具栏,包含“打开”、“保存”、“复制”、“剪切”、“粘贴”图片按钮的工具栏,  
     添加事件处理方法,单击相应的按钮能实现相应的功能。  
(4)在窗口中添加弹出式菜单,包含“打开”、“保存”、“复制”、“剪切”、“粘贴”的菜单项,  
     直接添加分隔线,并添加事件处理方法,选择相应的菜单项能实现相应的功能。  
 **/

import java.awt.*;

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

public class Nodepad extends JFrame {
	/*
	 * 组件声明
	 */
	private JTextArea editor;
	private Container c;
	private Font f = new Font("sanserif", Font.PLAIN, 12); //参数: 名称、样式和磅值大小;

	/*
	 * 菜单栏成员属性声明
	 */
	private JMenuBar mb; //菜单栏
	private JMenu fileMenu; //文件菜单  
	private JMenu editMenu; //编辑菜单  
	private JMenu formatMenu; //格式菜单  
	private JMenuItem fileMenuOpen, fileMenuSave, fileMenuExit; //'文件'菜单项  
	private JMenuItem editMenuCopy, editMenuCut, editMenuPaste; //'编辑'菜单项  
	private JMenu formatSet;//'格式'菜单第一级菜单  
	private JMenuItem lineWrap, cancleLineWrap, wrapStyleWord,
			cancleWrapStyleWord;//'格式'菜单第二级菜单  

	/*
	 * 工具栏成员属性声明
	 */
	private JToolBar toolBar; //工具栏
	private JButton b1, b2, b3, b4, b5; //声明5个按钮,分别为:“打开”、“保存”、“复制”、“剪切”、“粘贴”  

	/*
	 * 弹出式菜单属性声明
	 */
	private JPopupMenu pm;
	private JMenuItem item1, item2, item3, item4, item5;

	/**
	 * 构造函数
	 */
	public Nodepad() {
		super("简单记事本");
		setSize(400, 300);

		try {
			/*
			 * 科普:UIManager
			 * UIManager管理当前外观、可用外观集合、外观更改时被通知的 PropertyChangeListeners、外观默认值以及获取各种默认值的便捷方法。
			 */
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
			System.err.println("不能被设置外观的原因:" + e);
		}

		c = getContentPane(); //创建一个内容面板  
		editor = new JTextArea(); //创建一个文本区  
		c.add(new JScrollPane(editor)); //设置滚动条,并添加到内容面板  

		/*
		 * 菜单栏的实现
		 */
		//文件菜单的实现  
		mb = new JMenuBar(); //创建菜单栏
		fileMenu = new JMenu("文件(F)");//创建菜单  
		fileMenuOpen = new JMenuItem("打开(O)...Ctrl+O");
		fileMenuSave = new JMenuItem("保存(S)...Ctrl+S");
		fileMenuExit = new JMenuItem("退出");
		JMHandler JM = new JMHandler(); //创建监听器(内部类) 
		fileMenuOpen.addActionListener(JM); //注册监听器  
		fileMenuSave.addActionListener(JM);
		fileMenuExit.addActionListener(JM);
		fileMenu.add(fileMenuOpen);
		fileMenu.add(fileMenuSave);
		fileMenu.addSeparator(); //添加分隔线  
		fileMenu.add(fileMenuExit);
		fileMenu.setFont(f); //设置菜单中文体的字体  

		//编辑菜单的实现  
		editMenu = new JMenu("编辑(E)");
		editMenuCopy = new JMenuItem("复制(C) Ctrl+C");
		editMenuCut = new JMenuItem("剪切(T) Ctrl+X");
		editMenuPaste = new JMenuItem("粘贴(P) Ctrl+v");
		EMHandler EM = new EMHandler(); //创建监听器  
		editMenuCopy.addActionListener(EM);//注册监听器  
		editMenuCut.addActionListener(EM);
		editMenuPaste.addActionListener(EM);
		editMenu.add(editMenuCopy);
		editMenu.add(editMenuCut);
		editMenu.add(editMenuPaste);
		editMenu.setFont(f);

		//格式菜单的实现  
		formatMenu = new JMenu("格式(O)"); //创建菜单  
		formatSet = new JMenu("格式设置"); //二级菜单  
		lineWrap = new JMenuItem("自动换行"); //二级菜单项  
		cancleLineWrap = new JMenuItem("取消自动换行");
		wrapStyleWord = new JMenuItem("断行不断字");
		cancleWrapStyleWord = new JMenuItem("取消断行不断字");
		FMHandler FM = new FMHandler(); //创建事件监听器  
		lineWrap.addActionListener(FM); //注册二级菜单项的监听器  
		cancleLineWrap.addActionListener(FM);
		wrapStyleWord.addActionListener(FM);
		cancleWrapStyleWord.addActionListener(FM);
		formatSet.add(lineWrap);
		formatSet.add(cancleLineWrap);
		formatSet.addSeparator(); //添加分隔线  
		formatSet.add(wrapStyleWord);
		formatSet.add(cancleWrapStyleWord);
		formatMenu.add(formatSet);
		formatMenu.setFont(f);

		//将菜单全部添加菜单棒里  
		mb.add(fileMenu);
		mb.add(editMenu);
		mb.add(formatMenu);

		//工具栏的实现  
		//按钮分别为:“打开”、“保存”、“复制”、“剪切”、“粘贴”  
		toolBar = new JToolBar(); //创建工具棒  
		b1 = new JButton(new ImageIcon("img/open.gif"));
		b2 = new JButton(new ImageIcon("img/save.gif"));
		b3 = new JButton(new ImageIcon("img/copy.gif"));
		b4 = new JButton(new ImageIcon("img/cut.gif"));
		b5 = new JButton(new ImageIcon("img/paste.gif"));
		TBHandler TB = new TBHandler(); //创建按钮监听器  
		b1.addActionListener(TB);
		b2.addActionListener(TB);
		b3.addActionListener(TB);
		b4.addActionListener(TB);
		b5.addActionListener(TB);
		//把按钮全部添加到工具棒中  
		toolBar.add(b1);
		toolBar.add(b2);
		toolBar.add(b3);
		toolBar.add(b4);
		toolBar.add(b5);

		//弹出菜单的实现  
		pm = new JPopupMenu(); //创建弹出菜单  
		item1 = new JMenuItem("打开");
		item2 = new JMenuItem("保存");
		item3 = new JMenuItem("复制");
		item4 = new JMenuItem("剪切");
		item5 = new JMenuItem("粘贴");
		JPHandler JP = new JPHandler();
		item1.addActionListener(JP); //注册菜单项的鼠标事件监听器  
		item2.addActionListener(JP);
		item3.addActionListener(JP);
		item4.addActionListener(JP);
		item5.addActionListener(JP);
		editor.addMouseListener(JP); //注册文本区的鼠标事件监听器  
		pm.add(item1);
		pm.add(item2);
		pm.add(item3);
		pm.add(item4);
		pm.add(item5);

		//把菜单栏、工具栏、弹出菜单添加到内容面板  
		setJMenuBar(mb); //显示菜单栏  
		c.add(toolBar, BorderLayout.NORTH);

		/*
		 * frame 设置
		 */
		//位置
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();		//当前屏幕大小;
		Dimension frameSize = this.getSize();	//当前frame大小;
		if(frameSize.height > screenSize.height) {
			frameSize.height = screenSize.height;
		}
		if(frameSize.width > screenSize.width) {
			frameSize.width = screenSize.width;
		}
		setLocation((screenSize.width - frameSize.width)/2, (screenSize.height - frameSize.height)/2);
		//显示
		setVisible(true);
		//关闭动作
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	/**
	 * 内部类:实现'文件'菜单项的事件处理
	 * @author 23_11
	 */
	private class JMHandler implements ActionListener {
		/*
		 * 动作执行方法
		 */
		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == fileMenuOpen) {//点击‘打开’菜单项
				loadFile();
			} else if (e.getSource() == fileMenuSave) {//点击‘保存’菜单项
				saveFile();
			} else {//点击‘退出’菜单项
				System.exit(0);	//根据惯例,非 0 的状态码表示异常终止;
			}
		}

	}

	/**
	 * 打开文件方法
	 */
	public void loadFile()   
	{
		JFileChooser fc = new JFileChooser();
		int r = fc.showOpenDialog(this);
		if (r == JFileChooser.APPROVE_OPTION) {	//批准
			File file = fc.getSelectedFile();
			try {
				editor.read(new FileReader(file), null);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 保存文件的方法
	 */
	public void saveFile()   
	{
		JFileChooser fc = new JFileChooser();
		int r = fc.showSaveDialog(this);
		if (r == JFileChooser.APPROVE_OPTION) {
			File file = fc.getSelectedFile();
			try {
				editor.write(new FileWriter(file));
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 内部类: 编辑菜单菜单项的事件处理
	 * @author 23_11
	 */  
	private class EMHandler implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == editMenuCopy) //实现复制功能  
			{
				editor.copy();
				editor.requestFocus();//获取焦点
			} else if (e.getSource() == editMenuCut)//实现剪切功能  
			{
				editor.cut();
				editor.requestFocus();
			} else //实现粘贴功能  
			{
				editor.paste();
				editor.requestFocus();
			}
		}
	}

	/**
	 * 内部类:格式菜单二级菜单的菜单项的事件处理
	 * @author 23_11
	 */  
	private class FMHandler implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == lineWrap) {
				editor.setLineWrap(true);
			} else if (e.getSource() == cancleLineWrap) {
				editor.setLineWrap(false);
			} else if (e.getSource() == wrapStyleWord) {
				editor.setWrapStyleWord(true);
			} else {
				editor.setWrapStyleWord(false);
			}
		}
	}

	/**
	 * 内部类:实现工具栏的按钮事件处理;
	 * @author 23_11
	 */  
	private class TBHandler implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == b1) {
				loadFile();
			} //实现打开文件功能  
			else if (e.getSource() == b2) {
				saveFile();
			} //实现保存文件功能  
			else if (e.getSource() == b3) //文件复制  
			{
				editor.copy();
				editor.requestFocus();
			} else if (e.getSource() == b4) //文件剪切  
			{
				editor.cut();
				editor.requestFocus();
			} else //文件粘贴  
			{
				editor.paste();
				editor.requestFocus();
			}
		}
	}

	/**
	 * 内部类:实现弹出式菜单的事件处理;
	 * @author 23_11
	 */  
	private class JPHandler implements ActionListener, MouseListener {
		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == item1) {
				loadFile();
			} //实现打开文件功能  
			else if (e.getSource() == item2) {
				saveFile();
			} //实现保存文件功能  
			else if (e.getSource() == item3) //文件复制  
			{
				editor.copy();
				editor.requestFocus();
			} else if (e.getSource() == item4) //文件剪切  
			{
				editor.cut();
				editor.requestFocus();
			} else //文件粘贴  
			{
				editor.paste();
				editor.requestFocus();
			}
		}

		public void mouseReleased(MouseEvent e) {
			if (e.isPopupTrigger()) //判断是否按下鼠标右键  
				pm.show(editor, e.getX(), e.getY()); //显示弹出式菜单  
		}

		public void mouseClicked(MouseEvent e) {
		}

		public void mouseEntered(MouseEvent e) {
		}

		public void mouseExited(MouseEvent e) {
		}

		public void mousePressed(MouseEvent e) {
		}
	}

	/**
	 * 测试
	 * @param args
	 */
	public static void main(String[] args) {
		Nodepad N = new Nodepad();
	}

}