记事本java源代码
更新时间:2023-08-18 08:17:01 阅读量: 资格考试认证 文档下载
用java编写的记事本源代码
import java.awt.BorderLayout;
import java.awt.Font;
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.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
/**
* TXT记事本
*
* @author Administrator
*
*/
public class Notepad implements WindowListener, ActionListener, ItemListener {
/**
* 本程序的主界面框体 */ private JFrame frame; /** * 记事本名 */ private String txtName = "无标题"; /** * 文本区域
用java编写的记事本源代码
*/
private JTextArea center = new JTextArea();
/**
* 滚动条
*/
private JScrollPane pane = new JScrollPane(center);
/**
* 菜单条
*/
private JMenuBar menuBar = new JMenuBar();
/**
* 菜单 文件,系统,设置字体
*/
private JMenu fileMenu, systemMenu, setFont;
/**
* 菜单项 新建,打开,保存,另存,退出,字号变大,字号变小,关于,宋体,楷体,黑体,隶书
*/
private JMenuItem newItem, openItem, saveItem, saveAsItem, exitItem,
larger, smaller, about,songItem,kaiItem,heiItem,liItem;
/**
* 自动换行
*/
private JCheckBoxMenuItem autoChangeLine;
private boolean judge = false; // 判断是否需要自动换行 /** * 文件选择器 */ private JFileChooser chooser = new JFileChooser(); /** * 当前文件 */ private File currentFile = null; /** * 当新建或打开或退出时 判断文本区内容是否改变 */ private String compareTxt; /** * 当前字体 */ private Font font; /** * 当前字号 */
用java编写的记事本源代码
private int fontSize; /** * 当前字体的名字 */ private String fontName; /** * 初始化框体 */ private void initMainFrame() { if (frame == null) { // 创建窗体组件 frame = new JFrame(); } } // 窗体标题 frame.setTitle(txtName + "\t"+"记事本"); // 设置位置、尺寸 int width = 500; int height = 500; // 获取屏幕的宽和高 frame.setSize(width, height); // 设置右上角关闭按钮的默认操作 frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); frame.addWindowListener(this); frame.setLocationRelativeTo(null);//居中 /** * 显示框体 */ private void show() { frame.setVisible(true); } /** * 框体初始化 */ private void initComponent() { // 设置容器型组件的布局管理器 frame.setLayout(new BorderLayout()); // 初始化菜单 fileMenu = new JMenu("文件(F)"); fileMenu.setMnemonic(KeyEvent.VK_F); systemMenu = new JMenu("系统(S)");
用java编写的记事本源代码
systemMenu.setMnemonic(KeyEvent.VK_S);
setFont = new JMenu("设置字体");
// 初始化菜单项
newItem = new JMenuItem("新建");
newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
InputEvent.CTRL_DOWN_MASK));
newItem.addActionListener(this);
openItem = new JMenuItem("打开");
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_DOWN_MASK));
openItem.addActionListener(this);
saveItem = new JMenuItem("保存");
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_DOWN_MASK));
saveItem.addActionListener(this);
saveAsItem = new JMenuItem("另存为(A)");
saveAsItem.setMnemonic(KeyEvent.VK_A);
saveAsItem.addActionListener(this);
exitItem = new JMenuItem("退出(X)");
exitItem.setMnemonic(KeyEvent.VK_X);
exitItem.addActionListener(this);
larger = new JMenuItem("放大");
larger.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP,
InputEvent.CTRL_DOWN_MASK));
larger.addActionListener(this);
smaller = new JMenuItem("缩小"); smaller.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.CTRL_DOWN_MASK)); smaller.addActionListener(this); autoChangeLine = new JCheckBoxMenuItem("自动换行(W)"); autoChangeLine.setMnemonic(KeyEvent.VK_W); autoChangeLine.addItemListener(this); about = new JMenuItem("关于(A)"); about.setMnemonic(KeyEvent.VK_A); about.addActionListener(this); songItem=new JMenuItem("宋体"); songItem.addActionListener(this); kaiItem=new JMenuItem("楷体"); kaiItem.addActionListener(this); heiItem=new JMenuItem("黑体"); heiItem.addActionListener(this); liItem=new JMenuItem("隶书"); liItem.addActionListener(this);
用java编写的记事本源代码
} /** // 文件菜单 fileMenu.add(newItem); fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.add(saveAsItem); fileMenu.addSeparator(); fileMenu.add(exitItem); // 系统菜单 systemMenu.add(setFont); systemMenu.add(larger); systemMenu.add(smaller); systemMenu.add(autoChangeLine); systemMenu.addSeparator(); systemMenu.add(about); //设置字体菜单 setFont.add(songItem); setFont.add(kaiItem); setFont.add(heiItem); setFont.add(liItem); // 菜单条 menuBar.add(fileMenu); menuBar.add(systemMenu); // 框体添加文件区和菜单条 frame.add(pane); frame.setJMenuBar(menuBar); //初始化字体 center.setFont(font=new Font("宋体",0,12)); * 构造器 */ public Notepad() { initMainFrame(); initComponent(); } /** * 主函数 * * @param args */ public static void main(String[] args) { new Notepad().show();
用java编写的记事本源代码
} /** * 自动换行方法 */ private void autoChangeLine() { if (judge) { //judge为真 即需要自动换行 center.setLineWrap(true); } /** * 文件另存的方法 */ private void saveAs() {
int option = chooser.showSaveDialog(frame); //调出文件保存选择器
if (option == JFileChooser.APPROVE_OPTION) {
currentFile= chooser.getSelectedFile();
FileOutputStream fos = null;
int op = 0;
try {
if (!currentFile.exists()) { // 文件不存在,则新建一个
currentFile.createNewFile(); fos = new FileOutputStream(currentFile); // 写入文件 String content = center.getText(); fos.write(content.getBytes()); // 刷新缓存 fos.flush(); } else { //judge为假 不需要自动换行 center.setLineWrap(false); } 文件
允许写入!");
型
存文件 } else { // 文件存在 if (!currentFile.canWrite()) { //文件为只读类型 JOptionPane.showMessageDialog(frame, "此文件是只读类型,不 } else { //文件不是只读类 op = JOptionPane.showConfirmDialog(frame, "文件已经存在,是否要覆盖?", "确认?", JOptionPane.YES_NO_CANCEL_OPTION); } if (op == JOptionPane.YES_OPTION) {//用户选择覆盖时,用输出流保
用java编写的记事本源代码
"); } } // 建立输出流 fos = new FileOutputStream(currentFile); // 写入文件 String content = center.getText(); fos.write(content.getBytes()); // 刷新缓存 fos.flush(); } } } catch (IOException e) { e.printStackTrace(); } finally { } // 关闭流 if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 文件保存的方法 */ private void save() { if (currentFile == null) {// 新建的文件 saveAs(); //另存 } else {// 已存在的文件 if (!currentFile.canWrite()) { //文件为只读 JOptionPane.showMessageDialog(frame, "此文件是只读类型,不允许写入!
saveAs(); //另存
} else { //文件不为只读,用输出流保存文件
FileOutputStream fos = null;
try {
// 建立输出流
fos = new FileOutputStream(currentFile);
// 写入文件
String content = center.getText();
用java编写的记事本源代码
} /** } } // 刷新缓存 fos.flush(); } catch (IOException e1) { e1.printStackTrace(); } finally { // 关闭流 if (fos != null) { try { fos.close(); } catch (IOException e1) { e1.printStackTrace(); } } } * 文件未改变时 打开的方法 */ private void open() { int option = chooser.showOpenDialog(frame); //调出文件选择器 if (option == JFileChooser.APPROVE_OPTION) { currentFile = chooser.getSelectedFile(); //获得选择的文件 txtName = chooser.getName(currentFile); //获得选择文件的名字 frame.setTitle(txtName + "-记事本"); //在frame上显示 文件名字的 标题 FileReader fi = null; //用字符输入流来显示文件的内容 try { fi = new FileReader(currentFile); String sum = ""; char[] buff = new char[400]; int count = -1; while ((count = fi.read(buff)) != -1) { String once = new String(buff, 0, count); sum += once; } center.setText(sum); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } finally {
用java编写的记事本源代码
} } } fi.close(); } catch (IOException e1) { e1.printStackTrace(); } /** * 文件未改变时 新建的方法 */ private void newTxt() { } /** currentFile = null; //设置当前文件为空 txtName = "无标题"; //当前文件名为“无标题” frame.setTitle(txtName + "-记事本"); center.setText(null); //将文本区置空
* 判断文件是否改变
*
* @return
*/
@SuppressWarnings("null")
private boolean judge() {
boolean judgeTxt = false;// 默认为假,文件没有改变
if (currentFile == null) {// 文件不存在,即文件是新建的时候
if (!compareTxt.equals("")) { // 文本区有字符串存在时,即文件已经改变 judgeTxt = true;
}
} else {// 文件已经存在, 用原来文件的内容和当前显示的内容做比较, 如果相同则文件没有改变,如果不同,则文件改变了
String sum = null;
String compare = null;
compare += center.getText();//获得文本区内容
FileReader fi = null; //用字符流得到原来文件的内容
try {
fi = new FileReader(currentFile);
char[] buff = new char[400];
int count = -1;
用java编写的记事本源代码
} String once = new String(buff, 0, count); sum += once; } } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } finally { try { fi.close(); } catch (IOException e1) { e1.printStackTrace(); } } if (!compare.equals(sum)) {//原文件内容与当前文本区内容不同 judgeTxt = true; } } return judgeTxt; public void windowActivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowClosing(WindowEvent e) {//关闭按钮的监听 compareTxt = center.getText(); //获得文本区内容 if (judge()) { //文件内容已经改变了 int option = JOptionPane.showConfirmDialog(frame, "文件内容已经改变,是否要保存文件?", "记事本", JOptionPane.YES_NO_CANCEL_OPTION); if (option == JOptionPane.YES_OPTION) { // 选择了 是 save(); System.exit(0); } else if (option == JOptionPane.NO_OPTION) { // 选择了 否 System.exit(0);
用java编写的记事本源代码
} } else {//文本区内容没有改变 System.exit(0); } public void windowDeactivated(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowOpened(WindowEvent e) { } public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == newItem) { // 选择了新建 compareTxt = center.getText();//获得文本区内容 if (judge()) {// 文件内容已经被改变 int option = JOptionPane.showConfirmDialog(frame, "文件内容已经改变,是否要保存文件?", "记事本", JOptionPane.YES_NO_CANCEL_OPTION); if (option == JOptionPane.YES_OPTION) { // 选择了 是 save(); newTxt(); } else if (option == JOptionPane.NO_OPTION) { // 选择了 否 newTxt(); } } else {// 文件内容未改变 newTxt(); } } else if (source == openItem) {
用java编写的记事本源代码
// 选择了打开 compareTxt = center.getText();//获得文本区内容 if (judge()) {// 文件内容已经被改变 int option = JOptionPane.showConfirmDialog(frame, "文件内容已经改变,是否要保存文件?", "记事本", JOptionPane.YES_NO_CANCEL_OPTION); if (option == JOptionPane.YES_OPTION) { // 选择了 是 save(); // 另存 open(); // 打开 } else if (option == JOptionPane.NO_OPTION) { // 选择了 否 open(); // 打开 } } else {// 文件内容未改变 open(); } } else if (source == saveItem) { // 选择的保存 save(); } else if (source == saveAsItem) { // 选择了另存 saveAs(); } else if (source == exitItem) { // 选择了退出 compareTxt = center.getText();//获得文本区内容 if (judge()) { // 文件内容已经改变 int option = JOptionPane.showConfirmDialog(frame, "文件内容已经改变,是否要保存文件?", "记事本", JOptionPane.YES_NO_CANCEL_OPTION); if (option == JOptionPane.YES_OPTION) { // 选择了 是 save(); System.exit(0); } else if (option == JOptionPane.NO_OPTION) { // 选择了 否 System.exit(0); } } else { // 文件内容没有改变 System.exit(0); }
用java编写的记事本源代码
} } }else if (source == larger) { font=center.getFont(); fontSize=font.getSize(); fontName=font.getName(); fontSize++; font=new Font(fontName,0,fontSize); center.setFont(font); } else if (source == smaller) { font=center.getFont(); fontSize=font.getSize(); fontName=font.getName(); fontSize--; font=new Font(fontName,0,fontSize); center.setFont(font); } else if (source == about) { JOptionPane.showMessageDialog(frame, "version:1.0\n" + " 谢谢您的使用!\n" + "2011年8月3日"); }else if(source==songItem){ center.setFont(font=new Font("宋体",0,12)); }else if(source==kaiItem){ fontSize=font.getSize(); font=new Font("楷体",0,fontSize); center.setFont(font); }else if(source==heiItem){ fontSize=font.getSize(); font=new Font("黑体",0,fontSize); center.setFont(font); }else if(source==liItem){ fontSize=font.getSize(); font=new Font("隶书",0,fontSize); center.setFont(font); } // 自动换行按钮的监听事件 public void itemStateChanged(ItemEvent e) { judge = !judge; autoChangeLine(); }
正在阅读:
记事本java源代码08-18
编译原理 词法分析器 流程代码解析08-29
初中英语教学中如何布置与批改作业09-11
美丽的缝山公园作文600字06-25
第6讲_组建客户机服务器网络09-02
Illustrator练习试卷 - 图文11-15
多措并举 努力增加农民收入01-23
阿弥陀佛是正法09-17
经济史论文06-17
试卷(九).docx06-15
- 梳理《史记》素材,为作文添彩
- 2012呼和浩特驾照模拟考试B2车型试题
- 关于全面推进施工现场标准化管理实施的通知(红头文件)
- 江西省房屋建筑和市政基础设施工程施工招标文件范本
- 律师与公证制度第2阶段练习题
- 2019-2020年最新人教版PEP初三英语九年级上册精编单元练习unit6训练测试卷内含听力文件及听力原文
- 小升初数学模拟试卷(十四) 北京版 Word版,含答案
- 认识创新思维特点 探讨创新教育方法-精选教育文档
- 00266 自考 社会心理学一(复习题大全)
- 多媒体在语文教学中的运用效果
- 派出所派出所教导员述职报告
- 低压电工作业考试B
- 18秋福建师范大学《管理心理学》在线作业一4
- 中国铝业公司职工违规违纪处分暂行规定
- 13建筑力学复习题(答案)
- 2008年新密市师德征文获奖名单 - 图文
- 保安员培训考试题库(附答案)
- 银川市贺兰一中一模试卷
- 2011—2017年新课标全国卷2文科数学试题分类汇编 - 1.集合
- 湖北省襄阳市第五中学届高三生物五月模拟考试试题一
- 源代码
- 记事本
- java
- 饼干的生产工艺
- 物理有机化学前沿领域两个重要方面—有机分子簇集和自由基化学的研究
- 最全的系统解剖学重点复习
- (汉字的演变)
- 海利特空调 DL-F系列样本参数
- 初中化学第一单元走进化学世界单元综合检测试卷习题 (379)
- 中考物理电学知识复习策略与填空题的解答技巧
- FLUENT算例 (12)
- 第4讲-八年级物理-带答案-走进分子世界-静电现象
- 2015年湖南村官考试准考证打印时间
- CDS分析常用操作
- 高级英语第二册1-4,6,10课(张汉熙主编)课后paraphrase原句+译文
- 生态系统理论视角下的青少年社会化与社区服务
- 两汉文学史
- 2016党员政治学习笔记(三)
- 工程档案工作交底记录(适用于建设单位项目管理部门对参建单位)
- 2016年个人两学一做和履职尽责体会与总结
- 凯尔森的纯粹法理论探讨
- 安全月活动总结
- 探究初中生数学语言表达能力的培养