【java学习记录】10.实现基本的记事本功能(新建、打开、另存为)和简单的加解密功能

时间:2022-11-28 15:39:41
* 内容:
 * 1.实现基本的记事本功能(新建、打开、另存为)

 * 2.实现加解密功能:将字符转换为ASCII值并加10,超过255的减去255,将转换后的字符存入文本中


public class NotePad implements ActionListener{


JFrame jframe;//窗体
MenuBar menuB;//菜单条
Menu menu_Text;//“文件”菜单
Menu menu_Edit;//“编辑”菜单
Menu menu_Help;//“帮助”菜单
MenuItem text_New;//“新建”菜单项
MenuItem text_Open;//“打开”菜单项
MenuItem text_Save;//“另存为”菜单项
MenuItem help_Viewhelp;//“查看帮助”菜单项
TextArea textArea;//文本域
FileDialog dia_Open;//“打开文件”对话框窗口
FileDialog dia_Save;//“保存文件”对话框窗口
String str=null;//存储文本内容
StringBuffer stringB=new StringBuffer();//字符串常量
char[] c;// 将字符串拆成数组
int[] a;//存储字符串的ASCII值

NotePad(){
//创建窗体
jframe=new JFrame();
jframe.setTitle("无标题 - 记事本");//初始标题
jframe.setSize(900,600);//设置大小
jframe.setVisible(true);//设置窗体可见
jframe.setLocationRelativeTo(null);//窗体放屏幕中间
jframe.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);//结束进程

//创建菜单
menuB=new MenuBar();//创建菜单条
menu_Text=new Menu("文件");//创建“文件”菜单
menu_Edit=new Menu("编辑");//创建“编辑”菜单
menu_Help=new Menu("帮助");//创建“帮助”菜单
text_New=new MenuItem("新建");//创建“文件”菜单下的菜单项
text_Open=new MenuItem("打开");
text_Save=new MenuItem("另存为");
help_Viewhelp=new MenuItem("查看帮助");
menu_Text.add(text_New);//将菜单项添加到菜单中
menu_Text.add(text_Open);
menu_Text.add(text_Save);
menu_Help.add(help_Viewhelp);
menuB.add(menu_Text);//将菜单添加到菜单条中
menuB.add(menu_Edit);
menuB.add(menu_Help);
jframe.setMenuBar(menuB);//将菜单条添加到窗体中

//添加监听器
text_New.addActionListener(this);
text_Open.addActionListener(this);
text_Save.addActionListener(this);
help_Viewhelp.addActionListener(this);

//FileDialog(Frame parent, String title, int mode):创建一个具有指定标题的文件对话框窗口,用于加载(load)或保存(save)文件
dia_Open = new FileDialog(jframe,"打开文件",FileDialog.LOAD);
dia_Save = new FileDialog(jframe,"保存文件",FileDialog.SAVE);


//创建文本域
textArea=new TextArea();
textArea.setBounds(0, 0, jframe.size().width, jframe.size().height);//设置大小
textArea.setBackground(Color.white);//设置背景颜色
textArea.setFont(new Font("宋体",0,16));//new Font(String 字体,int 风格,int 字号),Font.PLAIN或者0:普通字体
jframe.add(textArea);
}

//添加点击事件
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

//e.getSource():获取点击的菜单项
if(e.getSource()==text_New){//新建
do_new();
}else if(e.getSource()==text_Open){//打开
do_open();
}else if(e.getSource()==text_Save){//保存
do_sava();
}else if(e.getSource()==help_Viewhelp){
do_desktop();
}
}

void do_new(){//新建记事本
if(textArea.getText().equals("")){//判断文本域有无内容
jframe.setTitle("无标题 - 记事本");//初始标题
}else{
warning();
}
}


void do_open(){//打开记事本
dia_Open.setVisible(true);//对话框可见
BufferedReader in;//文件缓冲流对象 
try{
/*
* dia_Open.getDirectory():获取文件上一级的路径
* dia_Open.getFile():获取文件名
* getDirectory()+getFile():完整文件路径
*/
textArea.setText(null);//清空内容
in=new BufferedReader(new FileReader(dia_Open.getDirectory()+dia_Open.getFile()));//选择路径
       //in.readLine():读取一整行(到换行符但不包括换行符)
       while ((str=in.readLine())!= null){
        c=str.toCharArray();// 将字符串拆成数组
a=new int[str.length()];//存储字符串的ASCII值
for(int i=0;i<c.length;i++){//解密
a[i]=(int)c[i]-10;//存储字符串的ASCII值
if(a[i]<0){//如果ASCII值小于0,则加上255
a[i]+=255;
}
c[i]=(char)a[i];//字符转化为ASCII值
}
str=String.valueOf(c);//将char转为string
        textArea.append(str+"\n");//使字符串的末尾换行
       }
       in.close();//关闭
       jframe.setTitle(dia_Open.getFile()+" - 记事本");//将打开的窗体标题显示为:文件名+“-记事本”
} catch (IOException e1) {//抛出异常
e1.printStackTrace();
   }
}

void do_sava(){//保存记事本
dia_Save.setVisible(true);//对话框可见
FileOutputStream out;//文件输出流对象
try {
out=new FileOutputStream(dia_Save.getDirectory()+dia_Save.getFile()+"[加密].txt");//存为txt格式,文件名为你输入的字符串 
str=textArea.getText().replace("\n", "\r\n");//获取文本域内容,并将"\n"换成"\r\n"   
c=str.toCharArray();// 将字符串拆成数组
a=new int[str.length()];//存储字符串的ASCII值
for(int i=0;i<c.length;i++){//加密
a[i]=(int)c[i]+10;//字符转化为ASCII值
if(a[i]>255){//如果ASCII值大于255,则减去255
a[i]-=255;
}
c[i]=(char)a[i];//ASCII值转化为字符
}


str=String.valueOf(c);//将char转为string
out.write(str.getBytes());//str.getBytes():将字符串转化为字节数组   
out.flush();//刷新缓冲区
out.close();//关闭
jframe.setTitle(dia_Save.getFile()+" - 记事本");//将保存后窗体标题显示为:文件名+"-记事本"
} catch (IOException e1) {
e1.printStackTrace();
}
}

void do_desktop(){//打开查看帮助
Desktop desktop = Desktop.getDesktop();//用默认浏览器打开网页
try {//打开帮助网页
desktop.browse(new URI("https://support.microsoft.com"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (URISyntaxException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}

void warning(){//弹出警告框

int option=JOptionPane.showConfirmDialog(null,"是否保存内容?","警告",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE, null);
switch (option) {
case JOptionPane.YES_NO_OPTION://点击“是” 
  do_sava();
  break;
case JOptionPane.NO_OPTION://点击“否”
textArea.setText(null);
do_new();
  break;
}
}

public static void main(String[] args){
//调用NotePad
new NotePad();
}
}


【java学习记录】10.实现基本的记事本功能(新建、打开、另存为)和简单的加解密功能