简单记事本&Java
目标:
学习java的IO流和文件的打开保存
内容:
使用javaSwing包里面的一些东西,比如按钮、菜单来进行布局
代码:
package myNotePad; import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.FeatureDescriptor;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
public class MyNotePad {
public static void main(String[] args) {
final JFrame jFrame = new JFrame("记事本"); JMenuBar jMenuBar = new JMenuBar();
jFrame.setJMenuBar(jMenuBar); // 注意!此处把菜单栏加到框架里面不是调用add方法(卡了40分钟,屏幕不显示窗体) JMenu jMenu1 = new JMenu("文件");
JMenu jMenu2= new JMenu("编辑");
jMenuBar.add(jMenu1); //add方法作用是把一个组件添加到另一个组件中。
jMenuBar.add(jMenu2); JMenuItem jMenuItem1 = new JMenuItem("打开");
JMenuItem jMenuItem2 = new JMenuItem("保存");
jMenu1.add(jMenuItem1);
jMenu1.add(jMenuItem2); final JTextArea jTextArea = new JTextArea();
jFrame.add(jTextArea);
//上面是框架创建完毕 //下面是给"打开"操作写上事件监听器
jMenuItem1.addActionListener(new ActionListener() { //这样写是创建匿名时间监听器对像,也可以自己写一个事件监听器类
@Override
public void actionPerformed(ActionEvent e) {
FileDialog fileDialog = new FileDialog(jFrame, "打开",FileDialog.LOAD);
fileDialog.setVisible(true); //注意,文件对话框默认是隐藏的(卡了10分钟,不显示对话框)
FileReader fileReader=null;
try {
fileReader = new FileReader(fileDialog.getDirectory()+fileDialog.getFile());
//注意:获取文件是 路径名getDirectory()+文件名getFile()!!切记getFile()里不包含路径名 (卡了90分钟,下载别人源码才明白)
} catch (FileNotFoundException e2) {
e2.printStackTrace();
}
if(fileReader!=null){
try(
//7.0版本JDK支持try(){}语法,作用:()内写创建输入输出对象后,就不用在finally中写关闭资源close()方法。
BufferedReader bufferedReader = new BufferedReader(fileReader);
) {
if(fileDialog.getFile()!=null){
fileReader = new FileReader(fileDialog.getDirectory()+fileDialog.getFile());
String str=null;
while((str=bufferedReader.readLine())!=null){ //把读文件写在while里是为了第一次就能判断
jTextArea.append(str);
}
}
}
catch (IOException e1) {
}
}
}
}); //下面是给"保存"操作写上事件监听器
jMenuItem2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FileDialog fileDialog = new FileDialog(jFrame, "保存", FileDialog.SAVE);
fileDialog.setVisible(true);
FileWriter fileWriter=null;
try {
fileWriter = new FileWriter(fileDialog.getDirectory()+fileDialog.getFile(),true);
//上一句代码用到了追加功能,防止再次写入覆盖原来的内容FileWriter(String fileName, boolean append)(卡了3分钟)
} catch (IOException e2) {
e2.printStackTrace();
}
if(fileWriter!=null){
try (BufferedWriter bf=new BufferedWriter(fileWriter)) {
String text = jTextArea.getText();
// char[] charArray = text.toCharArray();
bf.write(text); } catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
jFrame.setSize(400, 400);
jFrame.setLocation(600, 300);
jFrame.setVisible(true);
} }
运行:

思考和总结:
对事件的监听有了更深的了解
简单记事本&Java的更多相关文章
- 编写运行最简单的java程序——使用记事本编写java程序
第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还没有搭建环境变量的小伙伴请转移到上一篇的随笔中去完成搭建. ...
- 简单记事本的基本实现&十四周总结
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- 用命令提示符运行简单的Java程序报错
首先用记事本写一个最简单的Java代码,我把文件保存在桌面的HelloWorld文件夹中,这里将记事本的名称改为HelloWorld.java public class HelloWorld{ pub ...
- java基础学习02(简单的java程序)
简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...
- Linux环境下部署完JDK后运行一个简单的Java程序
前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...
- 一个简单的Java web服务器实现
前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...
- 三、使用Maven构建简单的java项目
前边,我刚搭建了Maven环境,还有给大家推荐了学习资源,这个小节,我们来就来,,简单的玩玩maven. 1.所需工具: 1.Eclipse 2.apache-maven-3.3.9 3. ...
- JNI_最简单的Java调用C/C++代码
JNI_最简单的Java调用C/C++代码 JNI.是Java Native Interface的简称,中文是"Java本地调用".通过这种技术能够做到下面两点: Java程序中的 ...
- 最简单的Java框架
框架framework的目的是定义骨架式方案,处理各种相同的底层细节:而开发人员使用框架时,能够依照自己的需求实现自己的功能--仅仅须要填入自己的东西/flesh. 最简单的框架,类似于JUnit,它 ...
随机推荐
- linux系统清理僵尸进程记录
在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程. 在fork()/execve()过程中,假设子进程结束时父进程仍存在, ...
- MIT算法导论笔记
详细MIT算法导论笔记 (网络链接) 第一讲:课程简介及算法分析 (Sheridan) 第二讲:渐近符号.递归及解法 (Sheridan) 第三讲:分治法(1)(Sheridan) 第四讲:快排及随 ...
- ieda常用快捷键
Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭文件Ctrl+[ ...
- sass的高级语法
1. 变量 sass允许使用变量,所有变量以$开头 2.引用父元素 & 这里 "&" 就代表是 a 3.继承 这样 class2 就 拥有了class1的所有属性 ...
- 蓝的成长记——追逐DBA(5):不谈技术谈业务,恼人的应用系统
***************************************声明*************************************** 个人在oracle路上的成长记录,当中 ...
- iOS学习笔记之蓝牙(有关蓝牙设备mac地址处理)
原文: http://blog.sina.com.cn/s/blog_6f2f0bed0102xn0e.html
- cocos2d-x 3.0 回调函数
參考文章: http://blog.csdn.net/crayondeng/article/details/18767407 http://blog.csdn.net/star530/article/ ...
- 【Excle数据透视表】如何重复显示行字段的项目标签
前提:该数据透视表以表格形式显示 解决办法: 通过报表布局设置"重复所有项目标签" 修改前样式 步骤 单击数据透视表中任意单元格→设计→报表布局→重复所有项目标签 修改后样式
- cisco 为每个单独的人员设置不同的用户名和密码
cisco 为每个单独的人员设置不同的用户名和密码 2010-12-15 17:00:16 分类: 系统运维 Router1#configure terminalEnter configuration ...
- CoreImage的模糊滤镜
//1.原始图片 UIImage * image = [UIImage imageNamed:@"1.jpg"]; /****************core image***** ...