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

📄 np.java

📁 java编写的记事本
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
package com.eduask;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GraphicsEnvironment;
import java.awt.Label;
import java.awt.List;
import java.awt.Point;
import java.awt.PrintJob;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowListener;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;
import javax.swing.undo.UndoManager;

public class Np extends JFrame implements ActionListener, MouseListener{	

	private static final long serialVersionUID = 1L;
	
/***声明全局成员变量,创建各种对象****************************************************************/
	
	private Frame mainFrame = new Frame("java记事本主窗体"); //主框架
	BorderLayout borderLayout = new BorderLayout();        //定义布局管理器
	JPanel contentPane = (JPanel)this.getContentPane();    //创建一个JPanel中间容器,用于存放轻量级组件(如JFileChooser\JMenuBar\JTextArea\JScrollPane等),此容器放置在JFrame的窗体中
	//private Container container;
	
	private String tempString;    //临时字符串,用于存储需要复制粘贴的字符串
	private int id_font ;         //字体 
	String fileName = "";         //上次保存后的文件名和地址
	String ss = "";					  //用于存放打开文件后文本区的内容,然后判断文本区内容是否改变
	boolean bsaved = false;	
	boolean check=true; 
	int jt; 			//用于查找类的一个变量
	JFrame th=this;		//将this设置为全局变量
	
	final JFileChooser jfc = new JFileChooser(); //创建一个打开对话框的对象
	final JTextArea jta = new JTextArea();       //创建文本区对象
	JScrollPane jsp = new JScrollPane();         //创建滚动条对象
	JMenuBar jmb = new JMenuBar();               //创建菜单栏对象;jmb.setOpaque(false);是设置菜单栏不透明	
	JToolBar jtb = new JToolBar();               //创建工具条;jtb.setOpaque(false);是设置工具栏不透明
	final JPopupMenu jpm=new JPopupMenu();       //创建鼠标右键对象
	JLabel statubar=new JLabel("状态栏:");        //创建状态栏对象
	JColorChooser jColor=new JColorChooser(); 	 //创建颜色选择器对象
	private UndoManager undoManager;             //撤销、重做管理类
	
	//创建菜单栏对象
	JMenu jm1 = new JMenu("文件(F)"); //创建文件对象jm1
	JMenu jm2 = new JMenu("编辑(E)"); //创建编辑对象jm2
	JMenu jm3 = new JMenu("格式(O)"); //创建格式对象jm3
	JMenu jm4 = new JMenu("查看(V)"); //创建查看对象jm4
	JMenu jm5 = new JMenu("帮助(H)"); //创建帮助对象jm5
	
	//添加文件菜单项
	JMenuItem ji1_1 = new JMenuItem("新建(N)");
	JMenuItem ji1_2 = new JMenuItem("打开(O)");
	JMenuItem ji1_3 = new JMenuItem("保存(S)");
	JMenuItem ji1_4 = new JMenuItem("另存为(A)");
	JMenuItem ji1_5 = new JMenuItem("页面设置(U)");
	JMenuItem ji1_6 = new JMenuItem("打印(P)");
	JMenuItem ji1_7 = new JMenuItem("退出(X)");
	 
	//创建编辑菜单项的对象
	JMenuItem ji2_1 = new JMenuItem("撤销(U)");
	JMenuItem ji2_1_1 = new JMenuItem("重做(R)");
	JMenuItem ji2_2 = new JMenuItem("剪切(T)");
	JMenuItem ji2_3 = new JMenuItem("复制(C)");
	JMenuItem ji2_4 = new JMenuItem("粘贴(P)");
	JMenuItem ji2_5 = new JMenuItem("删除(L)");
	JMenuItem ji2_6 = new JMenuItem("查找(F)");
	JMenuItem ji2_7 = new JMenuItem("查找下一个(N)");
	JMenuItem ji2_8 = new JMenuItem("替换(R)");
	JMenuItem ji2_9 = new JMenuItem("转到(G)");
	JMenuItem ji2_10 = new JMenuItem("全选(A)");
	JMenuItem ji2_11 = new JMenuItem("时间/日期(D)");
	
	//创建格式菜单项的对象
	JCheckBoxMenuItem ji3_1 = new JCheckBoxMenuItem("自动换行",true);
	//JCheckBox ji3_1 = new JCheckBox("自动换行",true); 
	JMenuItem ji3_2 = new JMenuItem("字体(F)");
	JMenuItem jcolor=new JMenuItem("颜色..."); 
	JMenuItem style=new JMenuItem("格式..."); 
	JMenuItem ji3_3 = new JMenuItem("全部转化为大写");
	JMenuItem ji3_4 = new JMenuItem("全部转化为小写");
	JMenuItem ji3_5 = new JMenuItem("加密");
	JMenuItem ji3_6 = new JMenuItem("解密");
	
	//创建查看菜单项的对象
	JCheckBoxMenuItem ji4_1 = new JCheckBoxMenuItem("状态栏(S)",true);
	//JCheckBox ji4_1 = new JCheckBox("状态栏(S)",true);	

	//创建帮助菜单项的对象
	JMenuItem ji5_1 = new JMenuItem("帮助主题(H)");
	JMenuItem ji5_2 = new JMenuItem("关于记事本(A)");
	
	//右键菜单 
	JMenuItem jMenuMouseCut = new JMenuItem("剪切"); 
	JMenuItem jMenuMouseCopy = new JMenuItem("复制"); 
	JMenuItem jMenuMousePaste = new JMenuItem("粘贴"); 
	JMenuItem jMenuMouseDel = new JMenuItem("删除");
	JMenuItem jMenuMouseUndo = new JMenuItem("撤销");
	JMenuItem jMenuMouseRedo = new JMenuItem("重做");
	
	//构造函数
/***构造函数,不带参数***********************************************************************/ 
	public Np() throws Exception{
			//判断文档内容是否改变
			//jta.getDocument().addDocumentListener(new myDocumentListener());
			
			//container = getContentPane();
			
			//创建按钮对象
			JButton buttonNew=new JButton(); 
			JButton buttonOpen=new JButton(); 
			JButton buttonSave=new JButton(); 
			
			//定义图标
			ImageIcon imageNew = new ImageIcon("images/new.gif");
			ImageIcon imageOpen = new ImageIcon("images/open.gif");
			ImageIcon imageSave = new ImageIcon("images/save.gif");
			
			//将图标加到按钮上,按钮将以图片形式显示
			buttonNew.setIcon(imageNew);
			buttonOpen.setIcon(imageOpen);
			buttonSave.setIcon(imageSave);
			
			//当鼠标置于按钮上时,出现注释
			buttonNew.setToolTipText("新建");
			buttonOpen.setToolTipText("打开");
			buttonSave.setToolTipText("保存");
			
			//将按钮添加到工具栏
			jtb.add(buttonNew);
			jtb.add(buttonOpen);
			jtb.add(buttonSave);
			
			//把布局管理器添加到容器中,容器将按此布局
			contentPane.setLayout(borderLayout);	
			
			//把工具栏及其布局管理添加到内容面板中,方向为JPanel的北边
			contentPane.add(jtb, BorderLayout.NORTH);
			 
			//鼠标菜单 
			//jta.add(jpm); 
			jpm.add(jMenuMouseCut); 
			jpm.add(jMenuMouseCopy); 
			jpm.add(jMenuMousePaste); 
			jpm.add(jMenuMouseDel); 
			jpm.addSeparator();
			jpm.add(jMenuMouseUndo); 
			jpm.add(jMenuMouseRedo); 
			jta.add(jpm);
			
			//鼠标事件 
			jMenuMouseCut.addActionListener(this); 
			jMenuMouseCopy.addActionListener(this); 
			jMenuMousePaste.addActionListener(this); 
			jMenuMouseDel.addActionListener(this); 
			jMenuMouseUndo.addActionListener(
					new ActionListener(){
						public void actionPerformed(ActionEvent event){
							if(undoManager.canUndo())
								undoManager.undo();
						}
					}
			); //右键撤销
			
			jMenuMouseRedo.addActionListener(
					new ActionListener(){
						public void actionPerformed(ActionEvent event){
							if(undoManager.canRedo())
								undoManager.redo();
						}
					}
			); //右键重做
			
			//增加右键监听
			jta.addMouseListener( new MouseAdapter(){
				public void mouseReleased(MouseEvent e){
					if(e.isPopupTrigger()){
						jpm.show(jta,e.getX(),e.getY());
					}
				}
			});
			
			//增加快捷键键
			jm1.setMnemonic('F');
			jm2.setMnemonic('E');
			jm3.setMnemonic('O');
			jm4.setMnemonic('V');
			jm5.setMnemonic('H');	
			ji1_1.setMnemonic(KeyEvent.VK_N);  
			ji1_1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,KeyEvent.CTRL_MASK));			
			ji1_2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK | InputEvent.ALT_MASK )); //增加组合快捷键		
			ji1_3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,KeyEvent.CTRL_MASK));		
			ji1_4.setMnemonic('A');
			ji1_5.setMnemonic('U');			
			ji1_6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,KeyEvent.CTRL_MASK));
			ji1_7.setMnemonic('X');	
			
			ji2_1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,KeyEvent.CTRL_MASK));
			ji2_1_1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,KeyEvent.CTRL_MASK));
			ji2_2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,KeyEvent.CTRL_MASK));
			ji2_3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,KeyEvent.CTRL_MASK));
			ji2_4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,KeyEvent.CTRL_MASK));
			ji2_5.setMnemonic('L');
			ji2_6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,KeyEvent.CTRL_MASK));
			ji2_7.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,KeyEvent.CTRL_MASK));
			ji2_8.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,KeyEvent.CTRL_MASK));
			ji2_9.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,KeyEvent.CTRL_MASK));
			ji2_10.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,KeyEvent.CTRL_MASK));
			ji2_11.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,KeyEvent.CTRL_MASK));
			ji3_1.setMnemonic('W');
			ji3_2.setMnemonic('F');		
			ji4_1.setMnemonic('S');
			ji5_1.setMnemonic('H');
			ji5_2.setMnemonic('A');	
			
			//页面设置
			ji1_5.addMouseListener(new MyPrintJob(this));
			//打印
			ji1_6.addMouseListener(new MyPrintJob(this));
			
			//添加文件菜单项
			jm1.add(ji1_1);
			jm1.add(ji1_2);
			jm1.add(ji1_3);
			jm1.add(ji1_4);
			jm1.addSeparator(); //设置水平分割线
			jm1.add(ji1_5);
			jm1.add(ji1_6);
			jm1.addSeparator();
			jm1.add(ji1_7);
			
			//添加编辑菜单项
			undoManager = new UndoManager();
			jta.getDocument().addUndoableEditListener(undoManager);;
			ji2_1.addActionListener(
				new ActionListener(){
					public void actionPerformed(ActionEvent event){
						if(undoManager.canUndo())
							undoManager.undo();
					}
				}
			); //撤销
			jm2.add(ji2_1);
			
			ji2_1_1.addActionListener(
					new ActionListener(){
						public void actionPerformed(ActionEvent event){
							if(undoManager.canRedo())
								undoManager.redo();
						}
					}
			); //重做
			jm2.add(ji2_1_1);
			
			ji2_1.setEnabled(false);			
			jm2.addSeparator();
			jm2.add(ji2_2);
			ji2_2.setEnabled(false);
			jm2.add(ji2_3);
			ji2_3.setEnabled(false);
			jm2.add(ji2_4);
			jm2.add(ji2_5);
			ji2_5.setEnabled(false);
			jm2.addSeparator();
			jm2.add(ji2_6);
			ji2_6.setEnabled(false);
			jm2.add(ji2_7);
			ji2_7.setEnabled(false);
			jm2.add(ji2_8);
			jm2.add(ji2_9);
			jm2.addSeparator();
			jm2.add(ji2_10);
			jm2.add(ji2_11);
			
			//添加格式菜单项
			jm3.add(ji3_1);			
			jm3.add(ji3_2);
			jm3.add(jcolor);
			jm3.add(style);
			jm3.add(ji3_3);
			jm3.add(ji3_4);
			jm3.add(ji3_5);
			jm3.add(ji3_6);
			
			//添加查看菜单项
			jm4.add(ji4_1);	
			JMenuItem charNum = new JMenuItem("统计字数");
			charNum.addActionListener(
				new ActionListener(){
					public void actionPerformed(ActionEvent event){
						JOptionPane.showMessageDialog(contentPane,"总字数为:\n"+jta.getText().trim().length(),"字数统计",JOptionPane.INFORMATION_MESSAGE);
					}
				}
			);
			jm4.add(charNum);
			
			jm4.addSeparator();
			JMenuItem fontLarge = new JMenuItem("放大字体");
			fontLarge.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M,KeyEvent.CTRL_MASK));	
			fontLarge.addActionListener(new fontChange());
			jm4.add(fontLarge);
			JMenuItem fontSmall = new JMenuItem("缩小字体");
			fontSmall.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,KeyEvent.CTRL_MASK));
			fontSmall.addActionListener(new fontChange());
			jm4.add(fontSmall);
			
			//添加帮助菜单项
			jm5.add(ji5_1);
			ji5_1.addActionListener(
					new ActionListener(){
						public void actionPerformed(ActionEvent event){
							JTextArea area = new JTextArea("本记事本由java语言编写,欢迎使用!");
							area.setEditable(false);
							JOptionPane.showMessageDialog(jta,area,"帮助",JOptionPane.INFORMATION_MESSAGE);
						}
					}
				);
			jm5.addSeparator();
			jm5.add(ji5_2);
			
			//菜单条添加菜单
			jmb.add(jm1);
			jmb.add(jm2);
			jmb.add(jm3);
			jmb.add(jm4);
			jmb.add(jm5);

			//框架添加菜单条 
			this.setJMenuBar(jmb);
			
			//把状态栏添加到内容面板中,方向为JPanel的南边
			this.setLayout(borderLayout); 
			contentPane.add(statubar,BorderLayout.SOUTH); 
			
			//设置上下方向滚动条为可见;jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);是设置左右方向滚动条为可见	
			jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 		
			jsp.setViewportView(jta); //给文本区增加滚动条
			this.add(jsp); //将滚动条添加到当前this(即JFrame窗体的np对象中)
						
			//设置文本区的样式	
			jta.setDoubleBuffered(false); 
			jta.setToolTipText("记事本"); 
			jta.setVerifyInputWhenFocusTarget(true); 
			jta.setText(""); 
			jta.setFont( new Font ( "Times New Rome" , Font.BOLD , 20));//设置字体和大小
			jta.setBackground(new Color(120 , 150 , 200));//设置文本区背景颜色	
			jta.setLineWrap(true); 	//设置自动换行	
			jta.addMouseMotionListener(new MyMouseMotionListener());
			jta.addMouseListener(new MyMouseMotionListener());
			//设置窗体的样式	
			this.setSize(600, 400);
			//this.setTitle("记事本");
			updateFname();
			this.setLocationRelativeTo(null); //居中
			this.setResizable(true);  //最大化不禁用,默认为不禁用
			this.setVisible(true);   //面板可用			
			this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); //默认什么也不做
			this.addWindowListener(new MyWindowListener());
			
			//添加菜单中的监听器 
			jta.addMouseListener(this); 			
		
			ji2_2.addActionListener(this);
			ji2_3.addActionListener(this);
			ji2_4.addActionListener(this);
			ji2_5.addActionListener(this);
			ji2_6.addActionListener(this);
			ji2_7.addActionListener(this);
			ji2_8.addActionListener(this);
			ji2_9.addActionListener(this);
			ji2_10.addActionListener(this);
			ji2_11.addActionListener(this);
			
			ji3_1.addActionListener(this);
			ji3_2.addActionListener(new SelectFont());
			ji3_3.addActionListener(this);

⌨️ 快捷键说明

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