记事本java源代码
更新时间:2023-06-11 06:54: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源代码06-11
12级应用文写作A卷09-15
(人教版)安徽省2019届高考地理一轮复习-思维导图微专题二十九:07-12
岗位职责等日常管理制度02-29
Hurst指数的Matlab实现02-02
华罗庚学校数学课本(一年级下) 第15讲 火柴棍游戏(二)05-10
2018年度公司党支部书记抓党建述职报告09-27
市场营销软件模拟实验(上交)07-23
02 - EDA - 第一章 ppt.Convertor11-09
试论现代分子生物学技术在医学检验中的应用07-23
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 源代码
- 记事本
- java
- 1.2正余弦定理应用举例
- 新人教版(2019)必修第二册高一下学期Unit4基础知识巩固检测
- 名词前修饰语的顺序
- 2015年湖南村官考试准考证打印时间
- 最全的系统解剖学重点复习
- 数据库基础与应用综合题
- 2006年黄浦区高考模拟考
- 初中化学第一单元走进化学世界单元综合检测试卷习题 (379)
- 第2章 简单C语言程序设计
- 不变的步伐心得体会五
- 海利特空调 DL-F系列样本参数
- 物理化学考研辅导提纲
- 某年度二级建造师执业资格考试试卷
- 幼儿园小班英语教案设计范文
- 构建合理的合作学习框架
- 幼儿小班英语儿歌教案设计三篇
- 空调机房吸音玻璃棉的施工工艺
- 沪教版(上海)初中数学七年级第一学期 10.4 分式的加减 教案
- 交通运输保障应急管理措施
- 连续封口机操作规程与日常保养及维护规定