使用Java实现简单记事本(打开,保存,另存为,改字体,改字体大小)

news/2024/11/15 6:09:20/

最近在看Sindar的Java课的作业,遇到了Java的GUI编程,每次遇到GUI这种就很头疼,C++的,MatLab的,都不是很会用。弄了差不多一天吧,因为安装的是jdk12而无法运行applet,重装了jdk1.8才行,写前面的一两个小实验题加重装环境基本上花了一个上午233。

虽然说我写出来了这个东西,不过也是东拼西凑,自己实际上不是很清楚内在的逻辑(毕竟一天之前我对JavaGUI一无所知)

主要使用的是Frame,然后之前一直不理解的地方是自己要怎么写保存文件的时候那个窗口,后来发现原来是系统提供的现成的,舒服233.

大体思路:先搭建一个菜单,一个文本域,然后对于菜单的每种操作再写一个处理函数。

有点问题就是,没有实现新建,不过从操作上来说,可以分解成先另存为再保存,或者直接在当前文本域编辑再另存为(不过没注意按了保存就会覆盖掉当前内容,比较危险)

基本的内容还是实现了

顺便IDEA还是np,觉得自己以前用DevC++属实是和用记事本一样(x

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;class FileMenu extends Menu{//FileMenu的内容public FileMenu(ActionListener action){super("File");MenuItem mi1,mi2,mi3,mi4;mi1=(new MenuItem("Save as"));mi2=(new MenuItem("Save"));mi3=(new MenuItem("Open"));mi4=(new MenuItem("Exit"));mi1.addActionListener(action);//添加监听,点击的时候才能捕捉到mi2.addActionListener(action);mi3.addActionListener(action);mi4.addActionListener(action);add(mi1);add(mi2);add(mi3);addSeparator();add(mi4);}
}class FontMenu extends Menu{//FontMenu的内容public FontMenu(ActionListener action){super("Font");MenuItem mi1,mi2,mi3,mi4,mi5;mi1=new MenuItem("TimesRoman");mi2=new MenuItem("Comic Sans MS");mi3=new MenuItem("consolas");mi4=new MenuItem("Increase font size");mi5=new MenuItem("Decrease font size");mi1.addActionListener(action);//添加监听mi2.addActionListener(action);mi3.addActionListener(action);mi4.addActionListener(action);mi5.addActionListener(action);add(mi1);add(mi2);add(mi3);addSeparator();add(mi4);add(mi5);}
}public class Solution extends Frame implements ActionListener{private String strFont="consolas";//记录字体,以便换字体private int Fontsize=30;//字体大小private JTextArea jt2;//文本域private JFrame jf;//窗口private String path="";//记录路径,以便保存private String filename="";//记录文件名,以便保存private Solution(){//搭建基础框架jt2=new JTextArea();//new一个文本区String title = "记事本";jf=new JFrame(title);MenuBar mb=new MenuBar();//新建一个菜单栏FileMenu fileMenu=new FileMenu(this);//搭建两个Menumb.add(fileMenu);FontMenu fontMenu=new FontMenu(this);mb.add(fontMenu);jf.setMenuBar(mb);//菜单栏放上去jf.setVisible(true);//窗体可见jf.setSize(600, 400);//窗体大小jf.setLayout(new BorderLayout());//边界布局jf.add(BorderLayout.CENTER,jt2);//文本框边界中间放置jt2.setBackground(Color.white);jt2.setFont(new Font(strFont,Font.PLAIN,Fontsize));}public void SaveAsAction(){//Save动作的处理FileDialog fd = new FileDialog(jf, "Save as", FileDialog.SAVE);fd.setVisible(true);path = fd.getDirectory();//获取路径filename = fd.getFile();//获取文件名try {FileOutputStream out = new FileOutputStream(path + filename, false);String s = jt2.getText();//输出到文件byte[] b = s.getBytes();out.write(b);out.close();} catch (IOException ex) {System.out.println(ex);}}public void SaveAction(){//保存的处理if (path.length() != 0) {try {FileOutputStream out = new FileOutputStream(path + filename, false);//这里flase是覆盖,否则是加到原文件末尾String s = jt2.getText();byte[] b = s.getBytes();out.write(b);out.close();} catch (IOException ex) {System.out.println(ex);}} else {JOptionPane jo = new JOptionPane();jo.showMessageDialog(null, "还没有将其保存到文件,请选择Save as将内容保存到文件");}}public void OpenAction(){//打开的处理FileDialog fd = new FileDialog(jf, "Open", FileDialog.LOAD);fd.setVisible(true);path = fd.getDirectory();filename = fd.getFile();if (path == null || filename == null) return;jt2.setText("");//清空当前的内容try {BufferedReader re = new BufferedReader(new FileReader(path + filename));//读取文件String s = null;while ((s = re.readLine()) != null) {     //写入文本域jt2.append(s + "\r\n");//对于不同操作系统的回车处理}re.close();} catch (IOException e1) {e1.printStackTrace();}}public void actionPerformed(ActionEvent e){String arg=e.getActionCommand();switch (arg) {case "Exit": //退出System.exit(0);case "Comic Sans MS": //三个if换字体strFont = "Comic Sans MS";break;case "TimesRoman":strFont = "TimesRoman";break;case "consolas":strFont = "consolas";break;case "Increase font size": //改变字体大小Fontsize = Fontsize + 3;break;case "Decrease font size":Fontsize = Fontsize - 3;break;case "Save as": { SaveAsAction();break; }//另存为,把文件内容导出存放case "Save": { SaveAction();break; }//保存文件内容,和另存为相似case "Open": { OpenAction();break; }//打开文件}jt2.setFont(new Font(strFont,Font.PLAIN,Fontsize));System.out.println(arg);}public void paint(Graphics g){g.setFont(new Font(strFont,Font.BOLD,Fontsize));g.drawString("",50,150);}public static void main(String[] args){new Solution();}
}

http://www.ppmy.cn/news/419373.html

相关文章

LineageOS 14.1(CM14.1)的快速下载与编译

代码的快速下载 Cyanogenmod OS或者说后来的Lineage OS的代码都是分为两个部分: cm团队自己或者社区开发的代码: 主要是适配设备, 例如vendor相关,放在github上面aosp代码: google的AOSP代码, 作为base 因为本地有一份AOSP的Mirror,所以这部分AOSP代码就不需要再从google去下载…

Win10 Mobile For MI4体验

在去年3月召开的微软硬件创新工程产业峰会(WinHEC)上,微软确认和小米达成了战略合作关系。如今一年过去了,Win10 Mobile For MI4(4G)的体验如何呢?今天,我就把手上小米4刷成了Win10 Mobile来体验一番。 Win…

vue2和vue3的区别,那些你不知道的细节

百度一下,你会发现很多博客文章都写了vue2和vue3的区别,问哪一个前端他都会告诉你:2是用defineProperty,而3是用Proxy啦,笨蛋。 当你用这个回答面试官的时候,面试官会不会问:能谈一下defineProp…

4.3/4

1.二分是在一定范围内查找一个数是否存在 返回它的下标 进而可以延申成为解决某些问题 答案在一段上下界固定的区间范围内 且上下界均可通过分析得到 那么就来使用二分 2.此处是找左边界 >x的第一个数 适用于最大值最小化问题 int l,r; while(l<r){int midlr>>…

米4刷机 error:missmatching board version

小米手机4 小米手机4-电信3G版/移动版/联通版小米手机4-电信4G版 手机下载twrp想刷recovery失败&#xff0c;但刷入boot成功了&#xff0c;然后开机就是 mi.com 进入fastboot也是这样。 刷不了机也。。。 线刷出现unspecified error 0xffffffff 可能是miflash版本太老了&#x…

小米Android 4.3.1刷机包,终于来了:小米4 Win10刷机包下载!附刷机教程

如之前的预告&#xff0c;今天上午10点&#xff0c;小米4的Windows 10 Mobile刷机包(公测版)终于来了。据小米总裁林斌表示&#xff0c;经过几个小时的试用之后&#xff0c;感觉还行&#xff0c;拍照效果OK&#xff0c;应用商店里面基本应用都有&#xff0c;微博要习惯一下&…

Halium 9 尝鲜 -- 在小米平板4上的移植 (七)

嗯&#xff0c;好像距离上次研究Halium已经过了很久了。虽然一直没时间弄这个&#xff0c;但是没全部驱动心里一直不太服气&#xff0c;最近还是抽出时间来把它弄好了&#xff08;好了&#xff0c;但没完全好&#xff09;。小米平板4终于有机会可以摆脱“大手机”的称号&#x…

4.0 4.0 4.0

Python语句print(r"\nGood")的运行结果是&#xff08;&#xff09; \nGood 字符串是一个连续的字符序列&#xff0c;用什么方式打印出可以换行的字符串&#xff1f; 使用\na与b定义如下&#xff0c;下列哪个是正确的? ( )   a 123   b 123 a is b s &quo…