Java实现记事本

题目

利用GUI实现一个简单的记事本(notepad),即打开文件,文字内容显示在界面上;

允许对文字内容进行编辑,并可以保存到文件。

代码

class notPadcontainer{

public Boolean visible = false;

//组件定义成属性

public JFrame notPadFrame;

public JMenuBar notPadMenuBar;

public JMenu firMenu;

public JMenu secMenu;

public JMenu thirMenu;

public JMenu fourMenu;

public JMenuItem buildItem;

public JMenuItem openItem;

public JMenuItem reserveItem;

public JMenuItem paperSetItem;

public JMenuItem clearItem;

public JMenuItem aboutItem;

public JMenuItem fontItem20;

public JMenuItem fontItem40;

public JTextArea textArea;

public JScrollPane textScrollPane;

/*

* 无参构造函数

* 创建组件 初始化组件

*/

notPadcontainer(){

//窗体Frame

this.notPadFrame = new JFrame("notePad by fishers"); //设置窗体 名字为notePad

this.notPadFrame.setLayout(new BorderLayout()); //边界布局方式

this.notPadFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭框

this.notPadFrame.setSize(500,500); //设置窗口大小

//菜单组件

this.notPadMenuBar = new JMenuBar();

this.firMenu = new JMenu("文件");

this.thirMenu = new JMenu("字体");

this.secMenu = new JMenu("编辑");

this.fourMenu = new JMenu("帮助");

//create JMenuItem for the First menu

this.buildItem = new JMenuItem("新建");

this.openItem = new JMenuItem("打开");

this.reserveItem = new JMenuItem("保存");

this.paperSetItem = new JMenuItem("页面设置");

//create JMenuItem for the sec thir four menu

this.clearItem = new JMenuItem("清空");

this.aboutItem = new JMenuItem("关于");

this.fontItem20 = new JMenuItem("字体20号");

this.fontItem40 = new JMenuItem("字体40号");

//文本组件

this.textArea = new JTextArea();

this.textScrollPane = new JScrollPane(textArea);

textArea.setFont(new Font("宋体",Font.PLAIN,20)); //默认20号字体

ItemAdd();

runListener();

}

//添加组件

public void ItemAdd(){

//添加JMenu到JMenuBar

notPadMenuBar.add(firMenu);

notPadMenuBar.add(secMenu);

notPadMenuBar.add(thirMenu);

notPadMenuBar.add(fourMenu);

//添加JMenuItem到第一个菜单

firMenu.add(buildItem);

firMenu.add(openItem);

firMenu.add(reserveItem);

firMenu.add(paperSetItem);

secMenu.add(clearItem);

thirMenu.add(fontItem20);

thirMenu.add(fontItem40);

fourMenu.add(aboutItem);

//notPadFrame中添加各个组件

this.notPadFrame.setJMenuBar(notPadMenuBar);

this.notPadFrame.add(textScrollPane,BorderLayout.CENTER);

}

/*

* 事件监听代码部分

*/

public void runListener() {

//新建文件 = 清空。。

buildItem.addActionListener( e -> {

textArea.setText("");

});

//打开文件

openItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

//设置弹出框 FileDialog

FileDialog saveFiledialog = new FileDialog(notPadFrame,"打开文件",FileDialog.LOAD);

saveFiledialog.setVisible(true);

String fileDir = saveFiledialog.getDirectory(); //拿到目录

String fileName = saveFiledialog.getFile(); //拿到文件名

// System.out.println(fileDir);

// System.out.println(fileName);

File openFile = new File(fileDir,fileName); //使用File类创建新文件对象

try {

FileReader freader = new FileReader(openFile); //字符流

StringBuffer tempBuffer = new StringBuffer();//StringBuffer可变

int len = 0; //下面使用read方法读取

while((len = freader.read()) != -1) {

tempBuffer.append((char)len); //append方法加入StringBuffer

}

String openString = new String(tempBuffer.toString());

textArea.setText(openString);

freader.close();//关闭流

} catch (FileNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

});

//保存文件

reserveItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

FileDialog saveFiledialog = new FileDialog(notPadFrame,"保存文件",FileDialog.SAVE);//父级frame 标题 mode

saveFiledialog.setVisible(true);

String fileDir = saveFiledialog.getDirectory();

String fileName = saveFiledialog.getFile();

System.out.println(fileDir);

System.out.println(fileName);

String ContentString = textArea.getText();

File saveFile = new File(fileDir,fileName);

try {

FileWriter fWriter = new FileWriter(saveFile); //使用字符流写文件

fWriter.write(ContentString); //写文件

fWriter.close(); //关闭流

}catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

});

//清空文件

clearItem.addActionListener( e -> {

textArea.setText("");

});

//监听关于

aboutItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

JFrame aboutFrame = new JFrame("关于"); //新建窗口

aboutFrame.setLayout(new BorderLayout());

aboutFrame.setSize(300,115);

aboutFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);//设置隐藏窗口

JPanel panel = new JPanel();

JLabel label = new JLabel("不会换行、中文乱码的记事本");

JPanel panel2 = new JPanel();

JLabel label2 = new JLabel("Copyright ? 2019 fishers");

panel.add(label);

panel2.add(label2);

aboutFrame.add(panel,BorderLayout.CENTER);

aboutFrame.add(panel2,BorderLayout.PAGE_START);

aboutFrame.setVisible(true);

}

});

fontItem20.addActionListener(e->{

textArea.setFont(new Font("宋体",Font.PLAIN,20));

});

fontItem40.addActionListener(e->{

textArea.setFont(new Font("宋体",Font.PLAIN,40));

});

}

//setVisible:设置窗口显示

public void setVisible(Boolean visible) {

this.visible = visible;

this.notPadFrame.setVisible(this.visible);

}

}

public class notePad {

public static void main(String[] args) {

notPadcontainer oneNote = new notPadcontainer();

oneNote.setVisible(true);

}

}

java buffer 记事本_Java实现记事本|IO流/GUI相关推荐

  1. java音频教程_Java如何使用IO流实现音频的剪切和拼接的示例代码

    这篇文章主要为大家详细介绍了Java使用IO流实现音频的剪切和拼接,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 需求:使用IO流将指定目录下的若干个音频文件的高潮部分,进行剪切,并重新拼接成一首 ...

  2. java中--《_Java中的IO流(五)

    当需要直接把信息输出到文件中的时候,并且想要每次输入完成后立即把信息输出到文件中,演示如下 1 private static void function_demo2() throwsIOExcepti ...

  3. Java面试知识点:File、IO流

    问题:Java面试知识点:File.IO流 答案: 1.File listFiles方法注意事项: • 当调用者不存在时,返回null • 当调用者是一个文件时,返回null • 当调用者是一个空文件 ...

  4. Java中的File类和IO流

    Java中的File类和IO流 File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. File的分隔符 import java.io.Fi ...

  5. java流类图结构_java学习之IO流(学习之旅,一)

    个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...

  6. java 弹出另存为_java如何实现 io流传输过来的文件,提示另存为弹出窗口?

    java如何实现 io流传输过来的文件,提示另存为弹出窗口? mip版  关注:166  答案:6  悬赏:0 解决时间 2021-01-24 22:00 已解决 2021-01-24 11:06 最 ...

  7. java输出流输入流的使用_Java中的IO流之文件输入输出流

    Java中的IO流之文件输入输出流 1.文件流介绍 文件流是以字节为单位进行读写文件的,所以属于字节流,并且是低级流.文件流位于java.io包下. 输入输出流分别是FileInputSteam和Fi ...

  8. java io流顶层_Java中的IO流(一)

    一,IO流的分类 A,按照操作的对象不同可分为字节流与字符流 B,按照流的方向不同可分为输入(指从外部存储设备拿文件到内存)流也叫读与输出(指从内存把文件写入到外部存储设备)流也叫写 注:字节流可以操 ...

  9. java中io流是类吗_Java中的IO流

    今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...

  10. java体系的四大基类_Java中的io流学习(了解四大基类和基本步骤)

    Java中io流四大基类及io流操作四大基本步骤 io流:(input/output)即输入输出流.面向对象的思想之一是面向接口编程,面向父类编程,也就是多态.所以学好基类(父类)很重要. 分类 按处 ...

最新文章

  1. R2LIVE: 一个鲁棒实时的雷达-惯导-视觉紧耦合的位姿估计和建图系统
  2. Using --强制资源清理
  3. python 按钮事件_从django vi中的按钮获取click事件
  4. django简单实现文件上传
  5. 「Vue」vuex 的使用
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的旅游管理系统
  7. 在线ASCII艺术字,Spring Boot banner生成工具
  8. 9.TCP/IP 详解卷1 --- IP 选路
  9. 以太坊使用及代币开发实战
  10. 【游戏理论】游戏与游戏开发
  11. 伯努利分布、二项分布、多项分布、Beta分布、Dirichlet分布、连续分布(正态分布)、大数定理、中心极限定理、贝叶斯理论
  12. MATLAB高维矩阵的求和、索引
  13. 车载etc充值显示服务器连接失败,为什么有的etc会显示余额,有的没有
  14. MDCC 2016参会总结
  15. hyperledger fabric 2.3.3 环境搭建教程
  16. python 节假日_python判断工作日,节假日
  17. 笔记本电脑键盘输入错误如何解决 电脑按键错乱的解决方法步骤
  18. redis+spring 整合
  19. 研华服务器显示不了全屏啊,研华串口服务器设置
  20. 【数据融合】基于AIS和雷达的多传感器航迹融合附matlab代码

热门文章

  1. 笔谈OpenGL ES(一)
  2. JavaScript 创建数组
  3. virt-manager 的桥接网络配置问题
  4. UOJ #590. 天天和树
  5. 使用PLSQL客户端登录ORACLE时报ORA-12502和ORA-12545错误的解决方案
  6. Android中Cursor类的概念和用法
  7. 自写网站入门阶段之一:熟悉各种标签的运用
  8. Dorado 7 IDE下载地址
  9. usb5-写成usb驱动
  10. 关于《红泰昌 TC-2015B》严重漏电说明!