📄 dreamtimesnotepad.java
字号:
/*
*********************************************************************
* *
* 一个简单的文本编辑器。 *
* 一、该本编辑器具有读出、写入、编辑文本文件的基本功能。 *
* 二、可以设定文字颜色、和编辑区域背景颜色等基本功能! *
* 三、新增了撤消的功能。(只能撤消一次,将在以后完善) *
* 四、实现了简单的打印的功能。 *
* 五、实现了右键弹出菜单和工具条。 *
* 六、实现了简单的查找功能。 *
* 七、新增文件状态判断的功能。在打开新文件、新建新文件以及退出程序时*
* 能够提示用户保存还没有保存的文件。 *
* *
* *
* 该程序可以自由复制和传播 *
* 请你保留作者的版权 *
* 欢迎提出意见以便程序的完善 *
* *
* 程序制作: 皮志平 *
* *
* *
* *
* *
*********************************************************************
*/
package cn.freeage.notepad;
import java.awt.*;
import java.awt.event.*; //导入java系统类
import java.io.*;
import java.util.*;
import java.awt.print.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.undo.*;
@SuppressWarnings("serial")
public class DreamTimesNotePad extends JFrame
implements ActionListener,
MouseListener,
DocumentListener {
JFrame f;
JMenuItem New, Open,Save, SaveAs,Print,PageSetup,Exit, //定义菜单
Undo,Copy,Paste,Cut,SelectAll, Delete,
Find,FindNext,
mFont, fontColor,backColor,
About,
pUndo,pNew,pCopy,pPaste,pCut,pSelectAll, pDelete;
File file = null; //文件对象
String fns = "新文件"; //文件名
JPopupMenu pm = new JPopupMenu();
JFileChooser fc = new JFileChooser(); //文件选择对话框
JColorChooser cc = new JColorChooser(); //颜色选择对话框
JTextArea text; //文本域对象
PrinterJob prt = PrinterJob.getPrinterJob(); //打印对象
Font defaultFont = new Font("Courier", Font.PLAIN,16);//默认字体
Font textfont;
Color fcolor,bcolor; //颜色变量
GraphicsEnvironment ge = GraphicsEnvironment.
getLocalGraphicsEnvironment();
Color scolor1 = new Color(130, 6, 254);
Color scolor2 = new Color(204,0,204);
Toolkit tk = Toolkit.getDefaultToolkit(); //创建工具集对象
Dimension sSize = tk.getScreenSize(); //得到屏幕的尺寸
UndoManager undo = new UndoManager();
UndoableEditListener undoHandler = new UndoHandler();
JLabel statusFile;
static int foundCount = 0;
int FindStartPos = 0;
boolean beginTextListener = true, isNewFile;
boolean findingLoop = true;
public static void main(String[] args) {
try {
//使用Swing 提供的不同的界面,本例使用的是window界面
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
//UIManager.setLookAndFeel("javax.swing.plaf.metextl.MetextlLookAndFeel");
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch(Exception e) { }
Locale.setDefault(Locale.ENGLISH);
Locale.setDefault(Locale.CHINA);
DreamTimesNotePad me = new DreamTimesNotePad();
me.windowLayout();
}
public void windowLayout() {
f = new JFrame(); //定义窗体
f.setIconImage(Iconlogo.getImage()); //设定窗体图标
//设定窗体标题
f.setTitle("记事本 - [新文件]");
//设定窗体的布局格式
f.getContentPane().setLayout(new BorderLayout(5, 5));
f.setSize(600,700); //设定窗体的大小
Dimension fSize = f.getSize(); //得到窗体的大小
//以下语句实现窗体居中显示
if(fSize.height > sSize.height){
fSize.height= sSize.height;
}
if(fSize.width > sSize.width){
fSize.width = sSize.width;
}
int x = (sSize.width - fSize.width)/2;
int y = (sSize.height - fSize.height)/2;
//创建状态栏面板
JPanel p = new JPanel();
//状态栏信息标签
JLabel label0 = new JLabel("文件状态:");
statusFile = new JLabel("新文件!");
JLabel label1 = new JLabel(" 程序制作:皮志平 ");
JLabel label2 = new JLabel(" http://www.freeage.cn");
JLabel label3 = new JLabel(" ");
JLabel label4 = new JLabel(Iconlogo);
label0.setForeground(scolor2);
statusFile.setForeground(scolor2);
label1.setForeground(scolor1); //设置标签字体颜色
label2.setForeground(scolor1);
label3.setForeground(scolor1);
text = new JTextArea(); //创建文本域对象
text.setFont(defaultFont); //设置文本域的字体
text.getDocument().addUndoableEditListener(undoHandler);
text.getCaret().setVisible(true);
text.addMouseListener(this);
text.getDocument().addDocumentListener(this);
text.getDocument().addUndoableEditListener(undoHandler);
JScrollPane scroller = new JScrollPane(text); //加入滚动条
f.setLocation(x,y);
p.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 0));
p.add(label0);
p.add(statusFile);
p.add(label1);
p.add(label2);
p.add(label3);
p.add(label4);
// 建立主菜单,并设定快捷键
JMenuBar mb = new JMenuBar();
JMenu File = new JMenu("文件(F)",true);
File.setMnemonic('F');
JMenu Edit = new JMenu("编辑(E)",true);
Edit.setMnemonic('E');
JMenu Search = new JMenu("查找(S)",true);
Search.setMnemonic('S');
JMenu Format = new JMenu("格式(O)",true);
Format.setMnemonic('O');
JMenu Help = new JMenu("帮助(H)",true);
Help.setMnemonic('H');
//建立各个主菜单的的子菜单并设定快捷键
//分别加入各个子菜单的事件监听
New = new JMenuItem(" 新建",new ImageIcon("images/snew.gif"));
New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
InputEvent.CTRL_MASK));
New.addActionListener(this);
Open = new JMenuItem(" 打开",new ImageIcon("images/sopen.gif"));
Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_MASK));
Open.addActionListener(this);
Save = new JMenuItem(" 保存",new ImageIcon("images/ssave.gif"));
Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_MASK));
Save.addActionListener(this);
SaveAs = new JMenuItem(" 另存为",new ImageIcon("images/ssave.gif"));
SaveAs.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2,0));
SaveAs.addActionListener(this);
PageSetup = new JMenuItem(" 打印设置",new ImageIcon("images/sprint.gif"));
PageSetup.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
PageSetup.addActionListener(this);
PageSetup.setEnabled(true);
Print = new JMenuItem(" 打印",new ImageIcon("images/sprint.gif"));
Print.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
InputEvent.CTRL_MASK));
Print.addActionListener(this);
Exit = new JMenuItem(" 退出",new ImageIcon("images/sexit.gif"));
Exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,
InputEvent.ALT_MASK));
Exit.addActionListener(this);
Undo = new JMenuItem("撤消",new ImageIcon("images/sundo.gif"));
Undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,
InputEvent.CTRL_MASK));
Undo.addActionListener(this);
Undo.setEnabled(false);
Copy = new JMenuItem(" 复制",new ImageIcon("images/scopy.gif"));
Copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.CTRL_MASK));
Copy.addActionListener(this);
Paste = new JMenuItem(" 粘贴",new ImageIcon("images/spaste.gif"));
Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
InputEvent.CTRL_MASK));
Paste.addActionListener(this);
Cut = new JMenuItem(" 剪切",new ImageIcon("images/scut.gif"));
Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
InputEvent.CTRL_MASK));
Cut.addActionListener(this);
SelectAll = new JMenuItem(" 全选");
SelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
InputEvent.CTRL_MASK));
SelectAll.addActionListener(this);
Delete = new JMenuItem(" 删除",new ImageIcon("images/sdelete.gif"));
Delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,
InputEvent.CTRL_MASK));
Delete.addActionListener(this);
Find = new JMenuItem(" 查找",new ImageIcon("images/sfind.gif"));
Find.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,
InputEvent.CTRL_MASK));
Find.addActionListener(this);
FindNext = new JMenuItem(" 查找下一个",new ImageIcon("images/sfindnext.gif"));
FindNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0));
FindNext.addActionListener(this);
mFont = new JMenuItem("字体");
mFont.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,
InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
mFont.addActionListener(this);
fontColor = new JMenuItem("字体颜色");
fontColor.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.ALT_MASK));
fontColor.addActionListener(this);
backColor = new JMenuItem("背景颜色");
backColor.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
backColor.addActionListener(this);
About = new JMenuItem("关于",new ImageIcon("images/shelp.gif"));
About.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
About.addActionListener(this);
//创建弹出菜单
pUndo = new JMenuItem(" 撤消",new ImageIcon("images/sundo.gif"));
pUndo.addActionListener(this);
pUndo.setEnabled(false);
pCopy = new JMenuItem(" 复制",new ImageIcon("images/scopy.gif"));
pCopy.addActionListener(this);
pPaste = new JMenuItem(" 粘贴",new ImageIcon("images/spaste.gif"));
pPaste.addActionListener(this);
pCut = new JMenuItem(" 剪切",new ImageIcon("images/scut.gif"));
pCut.addActionListener(this);
pDelete = new JMenuItem(" 删除",new ImageIcon("images/sdelete.gif"));
pDelete.addActionListener(this);
pSelectAll = new JMenuItem(" 全选");
pSelectAll.addActionListener(this);
//创建工具条
JToolBar toolbar = new JToolBar();
JButton toolnew = new JButton(Iconnew);
toolnew.setToolTipText("新建 (Ctrl+N)");
toolnew.addActionListener(new ActionListener() { //加入事件监听
public void actionPerformed(ActionEvent e) {
setnew(); //调用 newFile() 建立新文件
}
});
JButton toolopen = new JButton(Iconopen);
toolopen.setToolTipText("打开 (Ctrl+O)");
toolopen.addActionListener(new ActionListener() { //加入事件监听
public void actionPerformed(ActionEvent e) {
setopen(); //调用 openFile() 打开文件
}
});
JButton toolsave = new JButton(Iconsave);
toolsave.setToolTipText("保存 (Ctrl+S)");
toolsave.addActionListener(new ActionListener() { //加入事件监听
public void actionPerformed(ActionEvent e) {
if(file != null) {
saveFile();
}
else {
saveNewFile();
} //调用 saveFile() 保存文件
}
});
JButton toolprint = new JButton(Iconprint);
toolprint.setToolTipText("打印 (Ctrl+P)");
toolprint.addActionListener(new ActionListener() { //加入事件监听
public void actionPerformed(ActionEvent e) {
print(); //调用 print() 进行打印
}
});
JButton toolcopy = new JButton(Iconcopy);
toolcopy.setToolTipText("复制 (Ctrl+C)");
toolcopy.addActionListener(new ActionListener() { //加入事件监听
public void actionPerformed(ActionEvent e) {
text.copy(); //调用text的copy()方实现复制
}
});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -