📄 np.java
字号:
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 + -