📄 notebook.java
字号:
package notebook;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;
import java.awt.PrintJob;
import java.awt.ScrollPane;
import java.awt.SystemColor;
import java.awt.Toolkit;
import java.awt.event.*;
import java.awt.print.PrinterJob;
import java.io.BufferedReader;
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 javax.print.attribute.HashPrintRequestAttributeSet;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.LookAndFeel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoManager;
public class NoteBook extends JFrame implements DocumentListener{
NoteBook noteBook;
String filename = "无标题";
boolean alreadychange = false;
boolean alreadysave = false;
boolean alreadyfind = false;
File selectFile;
Font font = new Font(Font.DIALOG,Font.PLAIN,13); //设定字体格式
//定义菜单按钮
JPanel panel ;
JPanel statusPanel;
JMenuBar menuBar;
JScrollPane scrollPane;
BorderLayout borderLayout ;
JLabel jLabel;
JPopupMenu pMenu;
JFileChooser jFileChooser;
JMenu fileMenu;
JMenuItem newMenuItem;
JMenuItem openMenuItem;
JMenuItem saveMenuItem;
JMenuItem saveAsMenuItem;
JMenuItem pageMenuItem;
JMenuItem printMenuItem;
JMenuItem exitMenuItem;
JMenu editMenu;
JMenuItem undoMenuItem;
JMenuItem cutMenuItem;
JMenuItem copymMenuItem;
JMenuItem pasteMenuItem;
JMenuItem delMenuItem;
JMenuItem seachMenuItem;
JMenuItem nextMenuItem;
JMenuItem replaceMenuItem;
JMenuItem gotoMenuItem;
JMenuItem allMenuItem;
JMenuItem dateMenuItem;
JMenu formatMenu;
JCheckBoxMenuItem newlineMenuItem;
JMenuItem fontMenuItem;
JMenu seeMenu;
JCheckBoxMenuItem statusMenuItem;
JMenu helpMenu;
JMenuItem helpMenuItem;
JMenuItem aboutMenuItem;
JMenuItem popMenuUndo;
JMenuItem popMenuCopy ;
JMenuItem popMenuPaste;
JMenuItem popMenuCut;
JMenuItem popMenuDel ;
JMenuItem popMenuSelectAll;
JTextArea textArea;
JPopupMenu popupMenu;
ScrollPane sPane;
BufferedReader bufferedReader;
String strFind;
int FindStartPos;
//撤销管理器
UndoManager undo = new UndoManager();
UndoableEditListener undoHandler = new UndoHandler();
PrinterJob job;
public NoteBook(){
super();
initialize();
}
public void initialize(){
borderLayout =new BorderLayout();
textArea = new JTextArea();
jLabel = new JLabel();
panel =new JPanel();
//右键菜单设置
popupMenu = new JPopupMenu();
popMenuUndo = new JMenuItem("撤销");
popMenuCopy = new JMenuItem("复制");
popMenuPaste = new JMenuItem("粘贴");
popMenuCut = new JMenuItem("剪贴");
popMenuDel = new JMenuItem("删除");
popMenuSelectAll = new JMenuItem("全选");
statusPanel = new JPanel();
scrollPane =new JScrollPane(textArea);
statusPanel.add(jLabel);
statusPanel.setPreferredSize(new Dimension(600, 15));
//布局
panel.setLayout(borderLayout);
panel.add(statusPanel,borderLayout.SOUTH);
panel.add(scrollPane,borderLayout.CENTER);
//文档侦听
textArea .getDocument().addDocumentListener(this);
textArea.getDocument().addUndoableEditListener(undoHandler);
menuBar = new JMenuBar();
fileMenu = new JMenu("文件(F)");
newMenuItem = new JMenuItem("新建(N)");
newMenuItem.setMnemonic('N');
newMenuItem.setAccelerator(KeyStroke.getKeyStroke('N',java.awt.Event.CTRL_MASK,true));
newMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(alreadychange == false||textArea.getText()==null){
textArea.setText("");
filename = "无标题";
NoteBook.this.setTitle(filename+"-记事本");
}else{
if(alreadysave == true){
textArea.setText("");
filename = "无标题";
NoteBook.this.setTitle(filename+"-记事本");
} else{
int i = JOptionPane.showConfirmDialog(null, "文件"+filename+"的文档已经改变,想保存文件吗?", "记事本",JOptionPane.YES_NO_CANCEL_OPTION ,2 );
if(i == JOptionPane.YES_OPTION){
save();
} if(i == JOptionPane.NO_OPTION){
textArea.setText("");
filename = "无标题";
NoteBook.this.setTitle(filename+"-记事本");
} if(i == JOptionPane.CANCEL_OPTION){
return;
}
}
}
}
});
openMenuItem = new JMenuItem("打开(O)...");
openMenuItem.setMnemonic('O');
openMenuItem.setAccelerator(KeyStroke.getKeyStroke('O',java.awt.Event.CTRL_MASK,true));
openMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(textArea.getText().equals("")){
open();
} else{
if(alreadychange == true && alreadysave == false){
int i = JOptionPane.showConfirmDialog(null, "文件"+filename+"的文档已经改变,想保存文件吗?", "记事本",JOptionPane.YES_NO_CANCEL_OPTION ,2 );
if(i == JOptionPane.YES_OPTION){
save();
} if(i == JOptionPane.NO_OPTION){
open();
} if(i == JOptionPane.CANCEL_OPTION){
return;
}
}
else {
open();
}
}
}
}
);
saveMenuItem = new JMenuItem("保存(S)");
saveMenuItem.setMnemonic('S');
saveMenuItem.setAccelerator(KeyStroke.getKeyStroke('S',java.awt.Event.CTRL_MASK,true));
saveMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
save();
}
});
saveAsMenuItem = new JMenuItem("另存为(A)...");
saveAsMenuItem.setMnemonic('A');
saveAsMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
saveas();
}
});
printMenuItem = new JMenuItem("打印(P)");
printMenuItem.setMnemonic('P');
printMenuItem.setAccelerator(KeyStroke.getKeyStroke('P',java.awt.Event.CTRL_MASK,true));
printMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
HashPrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();
job.printDialog(attributeSet); //创建打印属性
}
});
exitMenuItem = new JMenuItem("退出(X)");
exitMenuItem.setMnemonic('X');
exitMenuItem.setAccelerator(KeyStroke.getKeyStroke('X', java.awt.Event.CTRL_MASK,true));
exitMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(alreadychange == true && alreadysave == false){
int i = JOptionPane.showConfirmDialog(null, "文件"+filename+"的文档已经改变,想保存文件吗?", "记事本",JOptionPane.YES_NO_CANCEL_OPTION ,2 );
if(i == JOptionPane.YES_OPTION){
save();
} if(i == JOptionPane.NO_OPTION){
System.exit(0);
} if(i == JOptionPane.CANCEL_OPTION){
return;
}
}
System.exit(0);
}
});
editMenu = new JMenu("编辑(E)");
undoMenuItem = new JMenuItem("撤销(U)");
undoMenuItem.setMnemonic('U');
undoMenuItem.setAccelerator(KeyStroke.getKeyStroke('Z',java.awt.Event.CTRL_MASK,true));
undoMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
undoDocument();
}
});
cutMenuItem = new JMenuItem ("剪贴(T)");
cutMenuItem.setMnemonic('T');
cutMenuItem.setAccelerator(KeyStroke.getKeyStroke('T',java.awt.Event.CTRL_MASK,true));
cutMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
textArea.cut();
}
});
copymMenuItem = new JMenuItem("复制(C)");
copymMenuItem.setMnemonic('C');
copymMenuItem.setAccelerator(KeyStroke.getKeyStroke('C',java.awt.Event.CTRL_MASK,true));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -