Java仿windows记事本源码.doc_第1页
Java仿windows记事本源码.doc_第2页
Java仿windows记事本源码.doc_第3页
Java仿windows记事本源码.doc_第4页
Java仿windows记事本源码.doc_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

package com.notepad;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;/* * 名称:JAVA记事本 * 功能:文本操作 * 作者:Old Rookie * 版本:1.0.0.1 * 日期:2014-1-30 */public class Notepad public static void main(String args) try / 将当前窗体外观设置为所在操作系统的外观UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch (ClassNotFoundException e) e.printStackTrace(); catch (InstantiationException e) e.printStackTrace(); catch (IllegalAccessException e) e.printStackTrace(); catch (UnsupportedLookAndFeelException e) e.printStackTrace();/ 实例主窗体NotepadFrame nFrame = new NotepadFrame();nFrame.NotepadMainFrame();package com.notepad;import java.awt.BorderLayout;import java.awt.Container;import java.awt.FlowLayout;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import javax.swing.JCheckBoxMenuItem;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.JPopupMenu;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JToolBar;import javax.swing.KeyStroke;import javax.swing.TransferHandler;import javax.swing.event.CaretEvent;import javax.swing.event.CaretListener;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import javax.swing.event.UndoableEditEvent;import javax.swing.event.UndoableEditListener;import javax.swing.undo.UndoManager;/* * 名称:JAVA记事本-主面板 * 功能:面板的操作及菜单显示功能 * 作者:Old Rookie * 版本:1.0.0.1 * 日期:2014-1-30 */ 主窗体,实现动作监听接口class NotepadFrame implements ActionListener /* * 初始化组件 */ 窗体static JFrame notepadFrame;/ 主容器private Container con;/ 菜单容器private JMenuBar menuBar;/ 主菜单:文件F、编辑E、格式O、查看V、帮助Hprivate JMenu File, Edit, Format, View, Help;/ 文件菜单项:新建N、打开O、保存S、另存为A、页面设置U、打印P、退出Xprivate JMenuItem fNewFile, fOpenFile, fSaveFile, fSaveAsFile, fPage,fPrint, fExit;/ 编辑菜单项:撤消U、剪切T、复制C、粘贴P、删除L、查找F、查找下一个N、替换R、转到G、全选A、日期/时间Dprivate JMenuItem eCancel, eCut, eCopy, eStick, eDel, eFind, eGoto,eFindNext, eReplace, eSelect, eDate;/ 格式菜单项:自动换行Wprivate JCheckBoxMenuItem oWrap;/ 格式菜单项:字体Fprivate JMenuItem oFont;/ 查看菜单:状态栏Sprivate JCheckBoxMenuItem vStatusBar;/ 帮助菜单:查看帮助H、关于记事本Aprivate JMenuItem hHelp, hAbout;/ 状态栏工具条private JToolBar statusBar;/ 状态栏标签private JLabel statusLabel;/ 文本编辑栏(静态)static JTextArea text;/ 滚动条private JScrollPane scroll;/ 撤消管理器private UndoManager undo;private UndoableEditListener undoHandler;/ 鼠标右键弹出菜单定义private JPopupMenu mpoMenu;/ 弹出菜单项:撤消U、剪切T、复制C、粘贴P、删除L、全选Aprivate JMenuItem mpo_Cancel, mpo_Cut, mpo_Copy, mpo_Stick, mpo_Del,mpo_Select;/ 用于判断文本变动,默认无变动private boolean isTextChange = false;/ 实例复制、粘贴、删除、全选、撤消、剪切notepadEdit nEdit = new notepadEdit();/ 实例字体NotepadFont nFont = new NotepadFont();/ 实例日期时间NotepadDateTime nDateTime = new NotepadDateTime();/ 实例帮助NotepadHelp nHelp = new NotepadHelp();/ 实例转到行GotoLine nGoto = new GotoLine();/ 实例查找FindText nFind = new FindText();/ 实例替换ReplaceText nReplace = new ReplaceText();/ 实例文件操作FileOperations nFile = new FileOperations();/ 页面设置和打印PageSetupAndPrint nPagePrint = new PageSetupAndPrint();/ 构造函数public NotepadFrame() /* * 构造组件 */ 主窗体notepadFrame = new JFrame();/ 菜单容器menuBar = new JMenuBar();/ 创建主菜单File = new JMenu(文件(F), true);Edit = new JMenu(编辑(E), true);Format = new JMenu(格式(O), true);View = new JMenu(查看(V), true);Help = new JMenu(帮助(H), true);/ 主菜单助记符File.setMnemonic(F);Edit.setMnemonic(E);Format.setMnemonic(O);View.setMnemonic(V);Help.setMnemonic(H);/ 创建菜单项-文件菜单,同时设置助记符fNewFile = new JMenuItem(新建(N), N);fOpenFile = new JMenuItem(打开(O)., O);fSaveFile = new JMenuItem(保存(S), S);fSaveAsFile = new JMenuItem(另存为(A)., A);fPage = new JMenuItem(页面设置(U)., U);fPrint = new JMenuItem(打印(P)., P);fExit = new JMenuItem(退出(X), X);/ 设置快捷键fNewFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK);fOpenFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK);fSaveFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK);fPrint.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK);/ 文件菜单-事件监听fNewFile.addActionListener(this);/ 事件监听fNewFile.setActionCommand(newFile);/ 点击向事件处理机制发送,操作命令fOpenFile.addActionListener(this);fOpenFile.setActionCommand(openFile);fSaveFile.addActionListener(this);fSaveFile.setActionCommand(saveFile);fSaveAsFile.addActionListener(this);fSaveAsFile.setActionCommand(saveAsFile);fPage.addActionListener(this);fPage.setActionCommand(PageSetup);fPrint.addActionListener(this);fPrint.setActionCommand(Print);fExit.addActionListener(this);fExit.setActionCommand(Exit);/ 将文件菜单加入到主菜单File中File.add(fNewFile);File.add(fOpenFile);File.add(fSaveFile);File.add(fSaveAsFile);File.addSeparator();/ 分割符File.add(fPage);File.add(fPrint);File.addSeparator();File.add(fExit);/ 将文件菜单加入到菜单条中menuBar.add(File);/* * 2、设置编辑菜单 */ 创建编辑菜单同时设置助记符eCancel = new JMenuItem(撤消(U), U);eCut = new JMenuItem(剪切(T), T);eCopy = new JMenuItem(复制(C), C);eStick = new JMenuItem(粘贴(P), P);eDel = new JMenuItem(删除(L), L);eFind = new JMenuItem(查找(F)., F);eFindNext = new JMenuItem(查找下一个(N), N);eReplace = new JMenuItem(替换(R)., R);eGoto = new JMenuItem(转到(G)., G);eSelect = new JMenuItem(全选(A), A);eDate = new JMenuItem(时间/日期(D), D);/ 设置快捷键eCancel.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK);eCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK);eCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK);eStick.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK);eDel.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0);eFind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK);eFindNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0);eReplace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK);eGoto.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,InputEvent.CTRL_MASK);eSelect.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK);eDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0);/ 编辑菜单事件监听eCancel.addActionListener(this);eCancel.setActionCommand(Cancel);eCut.addActionListener(this);eCut.setActionCommand(Cut);eCopy.addActionListener(this);eCopy.setActionCommand(Copy);eStick.addActionListener(this);eStick.setActionCommand(Stick);eDel.addActionListener(this);eDel.setActionCommand(Del);eFind.addActionListener(this);eFind.setActionCommand(Find);eFindNext.addActionListener(this);eFindNext.setActionCommand(FindNext);eReplace.addActionListener(this);eReplace.setActionCommand(Replace);eGoto.addActionListener(this);eGoto.setActionCommand(Goto);eSelect.addActionListener(this);eSelect.setActionCommand(Select);eDate.addActionListener(this);eDate.setActionCommand(DateTime);/ 设置编辑菜单默认是否可用eCancel.setEnabled(false);/ 默认不可用eCut.setEnabled(false);eCopy.setEnabled(false);eDel.setEnabled(false);eStick.setEnabled(true);eFind.setEnabled(false);/ 默认关闭eFindNext.setEnabled(false);/ 默认关闭eReplace.setEnabled(false);eGoto.setEnabled(false);eSelect.setEnabled(false);/ 默认关闭/ 将编辑菜单加入到主菜单Edit中Edit.add(eCancel);Edit.addSeparator();Edit.add(eCut);Edit.add(eCopy);Edit.add(eStick);Edit.add(eDel);Edit.addSeparator();Edit.add(eFind);Edit.add(eFindNext);Edit.add(eReplace);Edit.add(eGoto);Edit.addSeparator();Edit.add(eSelect);Edit.add(eDate);menuBar.add(Edit);/* * 3、设定格式菜单 */ 创建格式菜单oWrap = new JCheckBoxMenuItem(自动换行(W), true);/ 默认关闭oFont = new JMenuItem(字体(F)., F);/ 设置助记符oWrap.setMnemonic(W);/ 监听格式菜单事件oWrap.addActionListener(this);oWrap.setActionCommand(Wrap);oFont.addActionListener(this);oFont.setActionCommand(Font);/ 加入格式菜单Format.add(oWrap);Format.add(oFont);menuBar.add(Format);/* * 4、设定查看菜单 */ 创建查看菜单vStatusBar = new JCheckBoxMenuItem(状态栏(S), false);/ 选中/ 设置组记符vStatusBar.setMnemonic(S);/ 查看菜单事件监听vStatusBar.addActionListener(this);vStatusBar.setActionCommand(StatusBar);/ 加入查看菜单View.add(vStatusBar);menuBar.add(View);/ 状态栏默认不可用vStatusBar.setEnabled(false);/* * 5、设定帮助菜单 */ 创建帮助菜单hHelp = new JMenuItem(查看帮助(H), H);hAbout = new JMenuItem(关于记事本(A), A);/ 帮助菜单事件监听hHelp.addActionListener(this);hHelp.setActionCommand(Help);hAbout.addActionListener(this);hAbout.setActionCommand(About);/ 加入帮助菜单Help.add(hHelp);Help.add(hAbout);menuBar.add(Help);/* * 6、设定鼠标右键弹出菜单 */ 创建鼠标弹出菜单并监听mpoMenu = new JPopupMenu();mpo_Cancel = new JMenuItem(撤消(U), U);mpo_Cut = new JMenuItem(剪切(T), T);mpo_Copy = new JMenuItem(复制(C), C);mpo_Stick = new JMenuItem(粘贴(P), P);mpo_Del = new JMenuItem(删除(D), D);mpo_Select = new JMenuItem(全选(A), A);/ 设置鼠标弹出菜单默认是否可用mpo_Cancel.setEnabled(false);/ 默认不可用mpo_Cut.setEnabled(false);mpo_Copy.setEnabled(false);mpo_Stick.setEnabled(true);/ 粘贴默认可用mpo_Del.setEnabled(false);mpo_Select.setEnabled(false);/ 弹出菜单监听mpo_Cancel.addActionListener(this);mpo_Cancel.setActionCommand(Cancel);mpo_Cut.addActionListener(this);mpo_Cut.setActionCommand(Cut);mpo_Copy.addActionListener(this);mpo_Copy.setActionCommand(Copy);mpo_Stick.addActionListener(this);mpo_Stick.setActionCommand(Stick);mpo_Del.addActionListener(this);mpo_Del.setActionCommand(Del);mpo_Select.addActionListener(this);mpo_Select.setActionCommand(Select);/ 将菜单加入弹出容器中mpoMenu.add(mpo_Cancel);mpoMenu.addSeparator();mpoMenu.add(mpo_Cut);mpoMenu.add(mpo_Copy);mpoMenu.add(mpo_Stick);mpoMenu.add(mpo_Del);mpoMenu.addSeparator();mpoMenu.add(mpo_Select);/* * 撤消管理器 */ 创建撤消管理器undo = new UndoManager();undoHandler = new UndoHandler();/* * 7、创建文本编辑栏 */ 文本编辑栏text = new JTextArea();/ 创建滚动条并将text加入scroll = new JScrollPane(text);/ 初始化文本编辑框字体text.setFont(new Font(黑体, Font.PLAIN, 30);text.setLineWrap(true);/ 默认自动换行text.setWrapStyleWord(true);/ 换行不断字text.setText(记事本已设定新建或打开文件后编辑区方可使用!);/ 初始化不可用text.setEditable(false);/ 横向滚动条/ scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);/ 纵向滚动条scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);scroll.setVisible(true);/ 文本编辑区上的鼠标事件text.addMouseListener(new MouseAdapter() public void mouseReleased(MouseEvent e) mouseClicked(e);public void mousePressed(MouseEvent e) mouseClicked(e);public void mouseClicked(MouseEvent e) if (e.getButton() = 3) mpoMenu.show(e.getComponent(), e.getX(), e.getY();MouseAndMenu(););/ 文档变动各功能是否可用text.getDocument().addDocumentListener(new DocumentListener() public void removeUpdate(DocumentEvent e) eCancel.setEnabled(true);mpo_Cancel.setEnabled(true);if (text.getText().length() = 0) eGoto.setEnabled(false);eSelect.setEnabled(false);eFind.setEnabled(false);eFindNext.setEnabled(false);eReplace.setEnabled(false);public void insertUpdate(DocumentEvent e) eCancel.setEnabled(true);mpo_Cancel.setEnabled(true);eGoto.setEnabled(true);eSelect.setEnabled(true);eFind.setEnabled(true);eFindNext.setEnabled(true);eReplace.setEnabled(true);public void changedUpdate(DocumentEvent e) eCancel.setEnabled(true);mpo_Cancel.setEnabled(true););/ 文本变动监听text.getDocument().addUndoableEditListener(undoHandler); / 负责通知任何更改的撤消监听/* * 文本编辑区支持拖动功能,默认关闭支持拖动 */ 由于开启拖动支持,会影响到复制、剪切、粘贴等功能的快捷键功能text.setDragEnabled(false);text.setTransferHandler(new DragTheFile(text);/* * 8、状态栏 */ 创建状态栏statusBar = new JToolBar();/ 创建状态栏标签statusLabel = new JLabel(第 + 1 + 行, 第 + 1 + 列 );statusBar.setLayout(new FlowLayout(FlowLayout.RIGHT);statusBar.add(statusLabel);statusBar.setVisible(false);/ 状态栏默认不显示/ 获得光标文本行列text.addCaretListener(new CaretListener() public void caretUpdate(CaretEvent e) try int row = text.getLineOfOffset(e.getDot();int line = e.getDot() - text.getLineStartOffset(row);statusLabel.setText(第 + (row + 1) + 行, 第 + (line + 1) + 列 ); catch (Exception e2) e2.printStackTrace(););/* * 9、创建主容器 */ 主容器con = notepadFrame.getContentPane();con.add(statusBar, BorderLayout.SOUTH);con.add(scroll, BorderLayout.CENTER);/* * 主窗体属性 */public void NotepadMainFrame() / 设置窗体notepadFrame.setJMenuBar(menuBar);notepadFrame.setTitle(JAVA记事本);/ JFrame主窗体标题notepadFrame.setSize(500, 400);/ JFrame主窗体初始尺寸notepadFrame.setFont(new Font(宋体, Font.PLAIN, 12);notepadFrame.setLocationRelativeTo(null);/ JFrame主窗体默认在屏幕中间显示notepadFrame.setVisible(true);/ JFrame主窗体默认显示/ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/JFrame主窗体关闭时从虚拟机中关闭/ 重写窗口退出事件notepadFrame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) nFile.FileExit(););/* * 监听菜单事件处理方法 */public void actionPerformed(ActionEvent e) /* * 文件菜单事件处理方法 */ 监听新建事件处理方法if (e.getActionCommand().equals(newFile) nFile.NewFile();/ 监听打开事件处理方法else if (e.getActionCommand().equals(openFile) nFile.OpenFile();/ 监听保存事件处理方法else if (e.getActionCommand().equals(saveFile) nFile.SaveFile();/ 监听另存为事件处理方法else if (e.getActionCommand().equals(saveAsFile) nFile.SaveAsFile();/ 监听页面事件处理方法else if (e.getActionCommand().equals(PageSetup) nPagePrint.PageSetup();/ 监听打印事件处理方法else if (e.getActionCommand().equals(Print) nPagePrint.Print();/ 监听退出事件处理方法else if (e.getActionCommand().equals(Exit) nFile.FileExit();/* * 编辑菜单事件处理方法 */ 监听撤消事件处理方法else if (e.getActionCommand().equals(Cancel) nEdit.Cancel(undo);/ 文档没有任何变化撤消功能不可用if (!undo.canUndoOrRedo() eCancel.setEnabled(false);mpo_Cancel.setEnabled(false);/ 监听剪切事件处理方法else if (e.getActionCommand().equals(Cut) nEdit.Cut();/ 监听复制事件处理方法else if (e.getActionCommand().equals(Copy) nEdit.Copy();/ 监听粘贴事件处理方法else if (e.getActionCommand().equals(Stick) nEdit.Stick();/ 监听删除事件处理方法else if (e.getActionCommand().equals(Del) nEdit.Del();/ 监听查找事件处理方法else if (e.getActionCommand().equals(Find) nFind.mainTextFind();/ 监听查找下一个事件处理方法else if (e.getActionCommand().equals(FindNext) nFind.mainTextFind();/ 监听替换事件处理方法else if (e.getActionCommand().equals(Replace) nReplace.mainReplace();/ 监听转到事件处理方法else if (e.getActionCommand().equals(Goto) nGoto.GoLine();/ 监听全选事件处理方法else if (e.getActionCommand().equals(Select) nEdit.Select();/ 监听日期/时间事件处理方法else if (e.getActionCommand().equals(DateTime) nDateTime.DateTime();/* * 格式菜单事件处理方法 */ 监听自动换行事件处理方法else if (e.getActionCommand().equals(Wrap) / 判断选中自动换行if (oWrap.getState() / text可以自动换行text.setLineWrap(true);text.setWrapStyleWord(true);/ 换行不断字/ 转到菜单不可用eGoto.setEnabled(false);/ 状态栏菜单不选中vStatusBar.setState(false);/ 状态栏菜单不可用vStatusBar.setEnabled(false);/ 关闭状态栏statusBar.setVisible(false); else / text不可以自动换行text.setLineWrap(false);text.setWrapStyleWord(false);/ 转到菜单可用eGoto.setEnabled(true);/ 状态栏菜单可用vStatusBar.setEnabled(true);/ 监听字体事件处理方法else if (e.getActionCommand().equals(Font) nFont.font();/* * 查看菜单事件处理方法 */ 监听状态栏事件处理方法else if (e.getActionCommand().equals(StatusBar) / 判断状态栏是否选中if (vStatusBar.getState() / 显示状态栏statusBar.setVisible(true);/ 横向滚动条scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论