实现一个简易记事本
效果:记事本界面,实现用户编辑内容,文本字体设置,文件保存,文件打开,记事本退出
先来看看最后运行的一个结果界面:(代码在最后)
分析上图,第一个观察简易记事本的主要构成
1.菜单栏
2.文本域
3.给文本域添加的滚动条
第二个考虑窗体布局,明显的使用方位布局–BorderLayout。菜单栏添加到窗体的上方,文本域添加到窗体的中间。
第三个考虑使用到的组件:面板JPanel,菜单栏JMenuBar,菜单JMenu,文本域JTextArea,文本域的滚动条JScrollPane,
还有三个菜单JMenu:file 、edit 、view
第四个,代码的实现思路
1.定义要用到的变量
2.创建主要方法分别实现:变量初始化、组件往窗体上添加、组件事件监听,保存文件,打开文件,记事本退出等功能
代码有一些细节要注意,菜单有哪些都可以自己定义,如下,每俩功能之间都有一条下划线,当然这个不添加也可以。
代码实现
package test2;
//简易记事本,里面的this是调用成员变量,解决局部变量名称冲突问题
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
//继承JFrame的这个父类,实现监听器的接口
public class EasyTXT extends JFrame implements ActionListener {
//观察布局,有菜单栏和文本域两个上下组成,所以用方位布局
//先定义要用到的变量
JPanel jp;//窗体主面板
JTextArea jta;//文本域
JScrollPane jsp;//文本域的滚动条
JMenuBar jmb;//菜单栏组件
JMenu file,edit,view;//菜单内容
File currentFile=null;//当前打开的文件
boolean wasSaved=true;//当前文件是否保存
public void TextEditor(){
//该方法实现对组件的初始化
jp=new JPanel();//初始化面板
jmb=new JMenuBar();//初始化菜单栏组件
jta=new JTextArea(50,50);//初始化文本域
jta.getDocument().addDocumentListener(
//给文本域注册监听器,用来监听文档是否发生更改,DocumentListener()接口中有三个方法
new DocumentListener() {
@Override//表示继承,以下三个方法是对父类方法的一个重写
public void insertUpdate(DocumentEvent e) {
wasSaved=false;//表示编辑框有修改操作
//当监听到有这三种操作时就代表着文本将重新保存,这时文本状态是未保存的,所以用false,true是文件已保存
}
@Override
public void removeUpdate(DocumentEvent e) {
wasSaved=false;//表示对编辑框有插入操作
}
@Override
public void changedUpdate(DocumentEvent e) {
wasS