import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.text.Normalizer;
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.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Notepad extends JFrame{
//定义文件名
private static String fileName = null;
//文件内容
private static String fileContent = null;
//定义选择栏(从上到下)
private JMenuBar jMenuBar = new JMenuBar();
//定义文件菜单
private JMenu jMenu_file= new JMenu("文件");
//定义文件菜单中的子选项
private JMenuItem jMenuItem1 = null;
private JMenuItem jMenuItem2 = null;
private JMenuItem jMenuItem3 = null;
private JMenuItem jMenuItem4 = null;
//定义格式菜单
private JMenu jMenu_eidt= new JMenu("格式");
//定义格式菜单中的子选项
private JMenuItem jMenuItem5 = null;
//定义帮助菜单
private JMenu jMenu_help= new JMenu("帮助");
//定义帮助菜单中的子选项
private JMenuItem jMenuItem6 = null;
//定义文本域
private JTextArea jTextArea = new JTextArea();
//定义监听类对象
private MyActionListener myActionListener = new MyActionListener();
//定义并实例化一个文件选择框
private JFileChooser jFileChooser = new JFileChooser("F:\\");;
//定义文件输入流
private InputStreamReader inputStreamReader = null;
//定义字符输入流缓冲区
private BufferedReader bufferedReader = null;
//定义文件输出流
private FileOutputStream fileOutputStream = null;
private OutputStreamWriter outputStreamWriter =null;
//判断自动换行是否激活
private boolean lineFeed = false;
//定义滚动条
private JScrollPane jScrollPane = null;
//构造函数
public Notepad() {
super("记事本");
this.loadNorth();
this.init();
}
//初始化函数
private void init() {
//设置整体基本布局
//添加Windows窗口关闭监听事件
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
Notepad.this.exit();
}
});
setSize(new Dimension(800,600));
setLocationRelativeTo(null);
//添加菜单栏
setJMenuBar(jMenuBar);
//实例化滚动条对象,并添加垂直,水平滚动条(在需要的时候)
jScrollPane = new JScrollPane();
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
//添加滚动条只能用setViewportView()
jScrollPane.setViewportView(jTextArea);
//添加文本域
add(jScrollPane);
setVisible(true);
}
//添加顶部分控件(菜单栏)
//布局设置函数
private void loadNorth() {
jMenuItem1 = new JMenuItem("新建");
jMenuItem2 = new JMenuItem("打开");
jMenuItem3 = new JMenuItem("保存");
jMenuItem4 = new JMenuItem("退出");
jMenuItem5 = new JMenuItem("自动换行");
jMenuItem6 = new JMenuItem("关于记事本");
jMenu_file.add(jMenuItem1);
jMenu_file.add(jMenuItem2);
jMenu_file.add(jMenuItem3);
jMenu_file.add(jMenuItem4);
jMenu_eidt.add(jMenuItem5);
jMenu_help.add(jMenuItem6);
jMenuBar.add(jMenu_file);
jMenuBar.add(jMenu_eidt);
jMenuBar.add(jMenu_help);
jMenuBar.setVisible(true);
//为选项添加监听事件
jMenuItem1.addActionListener(myActionListener);
jMenuItem2.addActionListener(myActionListener);
jMenuItem3.addActionListener(myActionListener);
jMenuItem4.addActionListener(myActionListener);
jMenuItem5.addActionListener(myActionListener);
jMenuItem6.addActionListener(myActionListener);
}
//设置监听事件内部类
private class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String strClick = e.getActionCommand();
switch (strClick) {
case "新建":{
//新建条件1:如果文本区域为空,并且名字也为空(表示是一个空白的文件)或者已经有打开的文件,文件内容和文本区域内容一致则表示文件只是打开了但没有修改无需保存,直接初始化
if (Notepad.fileName == null && Notepad.this.jTextArea.getText().equals("")
|| Notepad.this.jTextArea.getText().equals(Notepad.fileContent)) {
System.out.println("新建1");
JOptionPane.showMessageDialog(null, "已新建!");
}
//新建条件2:①:文件为新建文件,但是有内容,②:文件为打开的文件,但是修改过
else {
System.out.println("新建2");
int answer = JOptionPane.showConfirmDialog(null, "是否保存?","温馨提示",JOptionPane.YES_NO_OPTION);
switch (answer) {
case 0:{
Notepad.this.saveFileByChooser();
break;
}
case 1:
break;
default:
break;
}
}
//将所有参数初始化
Notepad.fileName = null;
Notepad.fileContent = null;
Notepad.this.jTextArea.setText("");
Notepad.this.setTitle("新建 - 记事本");
System.out.println("新建");
break;
}
case "打开":{
//打开条件1:如果文本区域为空,并且名字也为空(表示是一个空白的文件),此时直接打开文件选择框就行
if (Notepad.fileName == null && Notepad.this.jTextArea.getText().equals("")) {
System.out.println("打开1");
openFileByChooser();
}
//打开条件2:如果已经打开的文件,文件内容和文本区域内容一致则表示文件只是打开了但没有修改无需保存,次直接打开文件选择框
else if (Notepad.this.jTextArea.getText().equals(Notepad.fileContent)) {
System.out.println("打开2");
Notepad.this.openFileByChooser();
}
//打开条件3:①:文件为新建文件,但是有内容,②:文件为打开的文件,但是修改过
else {
System.out.println("打开3");
int answer = JOptionPane.showConfirmDialog(null, "是否保存?","温馨提示",JOptionPane.YES_NO_OPTION);
switch (answer) {
case 0:
Notepad.this.saveFileByChooser();
openFileByChooser();
break;
case 1:
openFileByChooser();
break;
default:
break;
}
}
System.out.println("打开");
break;
}
case "保存":{
Notepad.this.saveFileByChooser();
//更新文件内容
Notepad.this.setTitle(Notepad.fileName + " - 记事本");
System.out.println("保存");
break;
}
case "退出":{
Notepad.this.exit();
System.out.println("退出");
break;
}
case "自动换行":{
Notepad.this.autoWrap();
System.out.println("自动换行" + Notepad.this.lineFeed);
break;
}
case "关于记事本":{
System.out.println("关于记事本");
String message = "记事本主要功能:\n"
+ "1.对文件的新建、打开、保存。\n"
+ "2.能够设置文本的自动换行\n"
+ "3.自动设置水平和垂直滚动条\n"
+ "4.能够按照ASCII字符编码(0-255)加密,加密时对每一字符+10,(若超过255,减去255),解密时作对应反变换。\n"
+"创作者:计科2003班--温明祥--5120205799";
JOption

无奈清风吹过
- 粉丝: 461
最新资源
- 在这一章中将介绍C语言程序的函数公开课一等奖优质课大赛微课获奖课件.pptx
- 网络营销必须有高质量的网站和营销特征及五个基本法则.doc
- 常用工具软件期中考试(1).doc
- 互联网+背景下电子商务课程创新实践教学体系研究.docx
- 某公司信息化规划课件.ppt
- 1通信工程施工方案.doc
- 串行接口教程串行通讯的概念教学提纲.ppt
- 实验5 sql语句练习——图书馆数据库答案.doc
- 奥林110kV全户内GIS变电站设计研究的开题报告.docx
- 企业市场营销在大数据环境下面临的挑战与机遇.docx
- 美食优秀网站推广方案.docx
- 计算机毕业的课程设置以及竞争力论文.docx
- 2023年java面试葵花宝典整理版.doc
- 单片机课程设计秒表定时器(1).doc
- 抽象类多态和接口.pptx
- 数据库维护工作手册.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



- 1
- 2
- 3
- 4
前往页