评论

收藏

[Java] Java仿Windows记事本源代码分享

编程语言 编程语言 发布于:2021-08-17 13:06 | 阅读数:413 | 评论:0

本文实例为大家分享了java仿windows记事本的具体代码,供大家参考,具体内容如下
先上截图:
DSC0000.png
DSC0001.jpg
DSC0002.jpg

源代码:
import java.awt.*;
import javax.swing.*;
import javax.swing.filechooser.filenameextensionfilter;
import javax.swing.undo.undomanager;
import java.awt.event.*;
import java.io.*;
 
/**
 * 
 * @author cjbi@outlook.com
 * @created 2015年7月6日 上午11:22:24
 */
public class jnotepad extends jframe implements actionlistener {
 
 jmenubar menubar = new jmenubar();
 jmenu file = new jmenu("文件(f)");
 jmenu edit = new jmenu("编辑(e)");
 jmenu format = new jmenu("格式(o)");
 jmenu help = new jmenu("帮助(h)");
 jmenuitem create = new jmenuitem("新建");
 jmenuitem open = new jmenuitem("打开...");
 jmenuitem save = new jmenuitem("保存");
 jmenuitem saveas = new jmenuitem("另存为...");
 jmenuitem exit = new jmenuitem("退出");
 jmenuitem undo = new jmenuitem("撤销");
 jmenuitem cut = new jmenuitem("剪切");
 jmenuitem copy = new jmenuitem("复制");
 jmenuitem paste = new jmenuitem("粘贴");
 jmenuitem findrep = new jmenuitem("查找替换");
 jmenuitem selectall = new jmenuitem("全选");
 jmenuitem font = new jmenuitem("字体");
 jmenuitem about = new jmenuitem("关于");
 jmenuitem cut2 = new jmenuitem("剪切(x)");
 
 jmenuitem copy2 = new jmenuitem("复制(c)");
 jmenuitem paste2 = new jmenuitem("粘贴(v)");
 jmenuitem selectall2 = new jmenuitem("全选(a)");
 public static jtextarea textarea = new jtextarea();
 undomanager um = new undomanager();
 jscrollpane scroll = new jscrollpane(textarea, scrollpaneconstants.vertical_scrollbar_always, scrollpaneconstants.horizontal_scrollbar_as_needed);
 jpopupmenu popup = new jpopupmenu();
 string pathselect;
 
 // 获取屏幕尺寸
 dimension screensize = toolkit.getdefaulttoolkit().getscreensize();
 
 public jnotepad() {
 
  // 此处定义键盘快捷键
  // menubar
  file.setmnemonic(keyevent.vk_f);
  edit.setmnemonic(keyevent.vk_e);
  format.setmnemonic(keyevent.vk_o);
  help.setmnemonic(keyevent.vk_h);
  // menuitem
  create.setaccelerator(keystroke.getkeystroke(keyevent.vk_n, actionevent.ctrl_mask));
  open.setaccelerator(keystroke.getkeystroke(keyevent.vk_o, actionevent.ctrl_mask));
  save.setaccelerator(keystroke.getkeystroke(keyevent.vk_s, actionevent.ctrl_mask));
  undo.setaccelerator(keystroke.getkeystroke(keyevent.vk_z, actionevent.ctrl_mask));
  cut.setaccelerator(keystroke.getkeystroke(keyevent.vk_x, actionevent.ctrl_mask));
  copy.setaccelerator(keystroke.getkeystroke(keyevent.vk_c, actionevent.ctrl_mask));
  paste.setaccelerator(keystroke.getkeystroke(keyevent.vk_v, actionevent.ctrl_mask));
  findrep.setaccelerator(keystroke.getkeystroke(keyevent.vk_f, actionevent.ctrl_mask));
  selectall.setaccelerator(keystroke.getkeystroke(keyevent.vk_a, actionevent.ctrl_mask));
 
  // 事件监听者
  save.addactionlistener(this);
  create.addactionlistener(this);
  open.addactionlistener(this);
  saveas.addactionlistener(this);
  exit.addactionlistener(this);
  undo.addactionlistener(this);
  cut.addactionlistener(this);
  copy.addactionlistener(this);
  paste.addactionlistener(this);
  selectall.addactionlistener(this);
  font.addactionlistener(this);
  about.addactionlistener(this);
  cut2.addactionlistener(this);
  copy2.addactionlistener(this);
  paste2.addactionlistener(this);
  selectall2.addactionlistener(this);
  findrep.addactionlistener(this);
  // 设置撤销文本的管理器
  textarea.getdocument().addundoableeditlistener(um);
  textarea.setfont(format.font);
  // 文件
  file.add(create);
  file.add(open);
  file.add(save);
  file.add(saveas);
  file.addseparator();
  file.add(exit);
 
  // 编辑
  edit.add(undo);
  edit.addseparator();
  edit.add(cut);
  edit.add(copy);
  edit.add(paste);
  edit.addseparator();
  edit.add(findrep);
  edit.addseparator();
  edit.add(selectall);
 
  // 格式
  format.add(font);
 
  // 帮助
  help.add(about);
 
  // 菜单栏
  menubar.add(file);
  menubar.add(edit);
  menubar.add(format);
  menubar.add(help);
 
  // 右键菜单
  popup.add(cut2);
  popup.add(copy2);
  popup.add(paste2);
  popup.addseparator();
  popup.add(selectall2);
 
  // 添加到文本域容器
  textarea.add(popup);
 
  // 匿名内部类监听器右键动作
  textarea.addmouselistener(new mouseadapter() {
   public void mousereleased(mouseevent e) {
  if (e.getbutton() == mouseevent.button3) {
   popup.show(textarea, e.getx(), e.gety());
  }
   }
  });
 
  // 边界布局
  this.add(menubar, borderlayout.north);
  this.add(scroll, borderlayout.center);
  this.settitle("记事本");
  this.setsize(500, 400);
  this.setlocationrelativeto(null);
  this.seticonimage(new imageicon(this.getclass().getresource("/icon/notepad.png")).getimage());//图标放在源目录的icon文件夹
  this.setdefaultcloseoperation(jframe.dispose_on_close);
  this.setvisible(true);
 
 }
 
 // 重写actionperformed
 @override
 public void actionperformed(actionevent e) {
  // event对象发生源
  if (e.getsource() == open) {
 
   jfilechooser chooser = new jfilechooser();
   filenameextensionfilter filter = new filenameextensionfilter("文本文档(*.txt)", "txt");
   chooser.setfilefilter(filter);
   chooser.setdialogtitle("文件打开");
   chooser.showopendialog(null);
   chooser.setvisible(true);
 
   try {
  pathselect = chooser.getselectedfile().getpath();
  filereader wjl = new filereader(pathselect);
  bufferedreader hcl = new bufferedreader(wjl);
  string s = "", zfc = "";
  while ((s = hcl.readline()) != null) {
   zfc += (s + "\n");
  }
  textarea.settext(zfc);
 
   } catch (exception e1) {
   }
  }
 
  if (e.getsource() == saveas) {// 另存为
 
   jfilechooser chooser = new jfilechooser();
   filenameextensionfilter filter = new filenameextensionfilter("文本文档(*.txt)", "txt");
   chooser.setfilefilter(filter);
   chooser.setdialogtitle("另存为");
   chooser.showsavedialog(null);
   chooser.setvisible(true);
 
   printstream ps;
   try {
  string select = chooser.getselectedfile().getpath();
  ps = new printstream(select);
  system.setout(ps);
  system.out.println(this.textarea.gettext());
 
   } catch (exception e1) {
   }
  }
 
  if (e.getsource() == save && (pathselect == null)) {// 保存
   jfilechooser chooser = new jfilechooser();
 
   chooser.setdialogtitle("保存");
   chooser.showsavedialog(null);
   chooser.setvisible(true);
 
   printstream ps;
   try {
  pathselect = chooser.getselectedfile().getpath();
  ps = new printstream(pathselect);
  system.setout(ps);
  system.out.println(this.textarea.gettext());
 
   } catch (exception e1) {
   }
  } else if (e.getsource() == save && !(pathselect == null)) {
   printstream ps;
   try {
  ps = new printstream(pathselect);
  system.setout(ps);
  system.out.println(this.textarea.gettext());
   } catch (filenotfoundexception e1) {
   }
  }
 
  if (e.getsource() == create) {
   textarea.settext("");
   pathselect = null;
  }
 
  if (e.getsource() == exit) {
   system.exit(0);
  }
 
  if (e.getsource() == undo) {
   if (um.canundo()) {
  um.undo();
   }
  }
 
  if (e.getsource() == cut || e.getsource() == cut2) {
   textarea.cut();
  } else if (e.getsource() == copy || e.getsource() == copy2) {
   textarea.copy();
  } else if (e.getsource() == paste || e.getsource() == paste2) {
   textarea.paste();
  } else if (e.getsource() == findrep) {
   new findandreplace(textarea);
  }
 
  else if (e.getsource() == selectall || e.getsource() == selectall2) {
   textarea.selectall();
  }
  if (e.getsource() == font) {
   new format(textarea);
  }
  if (e.getsource() == about) {
   new about();
  }
 
 }
 
 public static void main(string[] args) {
  new jnotepad();
 }
 
}
 
class findandreplace extends jdialog implements actionlistener {// 查找和替换
 jlabel findlabel = new jlabel("查找内容:");
 jlabel replabel = new jlabel(" 替换为:");
 jtextfield findtf = new jtextfield(8);
 jtextfield reptf = new jtextfield(8);
 jbutton findbtn = new jbutton("查找");
 jbutton repbtn = new jbutton("替换");
 jpanel findpn = new jpanel();
 jpanel reppn = new jpanel();
 jtextarea textarea;
 
 string text;
 boolean flg = false;
 int len;
 int start = 0;
 int k = 0;
 
 public findandreplace(jtextarea textarea) {
 
  this.textarea = textarea;
 
  findpn.add(findlabel);
  findpn.add(findtf);
  findpn.add(findbtn);
  reppn.add(replabel);
  reppn.add(reptf);
  reppn.add(repbtn);
  this.add(findpn);
  this.add(reppn);
 
  findbtn.addactionlistener(this);
  repbtn.addactionlistener(this);
 
  this.settitle("查找和替换");
  this.setlayout(new gridlayout(2, 1));
  // this.setbounds(400, 200, 300, 140);
  this.pack();
  this.setlocationrelativeto(null);
  this.setresizable(false);
  this.setvisible(true);
  this.setdefaultcloseoperation(jdialog.dispose_on_close);
 }
 
 @suppresswarnings("deprecation")
 public void actionperformed(actionevent e) {
  string findtext = findtf.gettext();
  string reptext = reptf.gettext();
  text = textarea.gettext();
  if (e.getsource() == findbtn) {
   findbtn.setlabel("下一个");
   if (findtext != null) {
  len = findtext.length();
  start = text.indexof(findtext, k);
  k = start + len;
  textarea.select(start, start + len);
  flg = true;
  if (start == -1) {
   joptionpane.showmessagedialog(null, "已到文件尾部!", "提示", joptionpane.information_message);
   start = 0;
   k = 0;
   flg = false;
  }
   }
  } else if (e.getsource() == repbtn) {
   if (flg) {
  textarea.replacerange(reptext, start, start + len);
  flg = false;
   }
  }
 }
}
 
// 字体格式
class format extends jdialog implements actionlistener {
 
 public static int style = 0; // 全局变量类型,默认值为0
 public static int size = 16; // 全局变量字体大小,默认值为16
 public static font font = new font("新宋体", style, size); // 全局变量字体,默认值为新宋体
 
 jpanel pn = new jpanel();
 jpanel okcelpn = new jpanel();
 jpanel fontpn = new jpanel();
 jpanel ptpn = new jpanel();
 jlabel fontlabel = new jlabel("字体: ");
 jlabel fontstylelabel = new jlabel(" 字形: ");
 jlabel ptlabel = new jlabel("  磅值: ");
 jbutton ok = new jbutton("确定");
 jbutton cancel = new jbutton("取消");
 graphicsenvironment e = graphicsenvironment.getlocalgraphicsenvironment();// 获取系统中可用的字体的名字
 string[] fontname = e.getavailablefontfamilynames();// 获取系统中可用的字体的名字
 string[] fonttype = { "常规", "倾斜", "粗体", "粗偏斜体" };
 jlist fontlist = new jlist(fontname);
 jlist fonttypelist = new jlist(fonttype);
 jscrollpane fontscroll = new jscrollpane(fontlist);
 jscrollpane fonttypescroll = new jscrollpane(fonttypelist);
 
 jtextarea textarea;
 spinnermodel spinnermodel = new spinnernumbermodel(size, // initial value
   0, // min
   100, // max
   2 // step
 );
 jspinner spinner = new jspinner(spinnermodel);
 
 public format(jtextarea textarea) {
  this.textarea = textarea;
  ok.addactionlistener(this);
  cancel.addactionlistener(this);
 
  pn.setlayout(new gridlayout(2, 1));
  pn.add(fontpn);
  pn.add(ptpn);
 
  fontpn.add(fontlabel);
  fontpn.add(fontscroll);
  fontpn.add(fontstylelabel);
  fontpn.add(fonttypescroll);
 
  ptpn.add(ptlabel);
  ptpn.add(spinner);
 
  fontlist.setvisiblerowcount(5);
  fontlist.setfixedcellwidth(60);
  fontlist.setselectedindex(50);
  fontlist.setselectedvalue(font.getfontname(), true);
 
  fonttypelist.setvisiblerowcount(5);
  fonttypelist.setselectedindex(style);
  okcelpn.add(ok);
  okcelpn.add(cancel);
 
  okcelpn.setlayout(new flowlayout(flowlayout.right));
 
  this.add(pn, borderlayout.center);
  this.add(okcelpn, borderlayout.south);
 
  this.settitle("字体");
  this.pack();
  this.setlocationrelativeto(null);
  this.setresizable(false);
  this.setvisible(true);
  this.setdefaultcloseoperation(jframe.dispose_on_close);
 }
 
 public void actionperformed(actionevent e) {
  if (e.getsource() == ok) {
   system.out.println(fontlist.getselectedvalue());
   style = this.type();
   size = integer.parseint(spinner.getvalue().tostring());
   font = new font((string) fontlist.getselectedvalue(), style, size);
   textarea.setfont(font);
   this.dispose();
   system.out.println(type());
  } else if (e.getsource() == cancel) {
   this.dispose();
  }
 }
 
 private int type() {
  if (fonttypelist.getselectedvalue().equals("倾斜")) {
   return 1;
  } else if (fonttypelist.getselectedvalue().equals("粗体")) {
   return 2;
  } else if (fonttypelist.getselectedvalue().equals("粗偏斜体")) {
   return 3;
  } else
   return 0;
 }
 
}
 
class about extends jdialog {// 关于窗口
 
 about() {
  joptionpane.showmessagedialog(null, " 作者:cjb 版本:v1.5\n\n 联系:cjbi@outlook.com", "关于",
  joptionpane.plain_message);
 }
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持CodeAE代码之家

关注下面的标签,发现更多相似文章