import java.awt.FileDialog;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Notepad extends JFrame {
// 定义组件
MenuBar menubar; // 菜单栏
Menu menu; // 菜单
JTextArea edit_Area;
MenuItem open_menuItem, save_menuItem, exit_menuItem; // 子菜单
FileDialog open_fileDialog, save_fileDialog; // 弹出的保存打开框
JScrollPane jspane; // 让文本域可以滚动的组件
File file;
public Notepad() {
init();
event();
}
// 设置监听
private void event() {
open_menuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
openfile();
}
});
save_menuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
savefile();
}
});
exit_menuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
// 打开文件方法
private void openfile() {
open_fileDialog.setVisible(true); // 设置其显示出来
// 获取路径和文件名
String dirPath = open_fileDialog.getDirectory();
String fileName = open_fileDialog.getFile();
// 防止点击取消报错
if (dirPath == null || fileName == null)
return;
edit_Area.setText(""); // 将文本区域清空
file = new File(dirPath, fileName); // 建立文件对象
// 按照行来读取数据,显示在文本区域
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null;
while ((line = br.readLine()) != null) {
edit_Area.append(line + "\r\n");
}
br.close();
} catch (IOException ex) {
throw new RuntimeException("读取失败");
}
}
// 保存文件方法
private void savefile() {
// 先判断文件是否存在
if (file == null) {
save_fileDialog.setVisible(true);
String dirPath = save_fileDialog.getDirectory();
String fileName = save_fileDialog.getFile();
// 防止点击取消报错
if (dirPath == null || fileName == null)
return;
// 因为文件不存在。所以需要建立file对象
file = new File(dirPath, fileName);
}
// 将数据写入文件
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
String info = edit_Area.getText(); // 得到文本区域的信息
bw.write(info); // 写入操作
bw.flush();
bw.close();
} catch (IOException e1) {
throw new RuntimeException();
}
}
// 初始化
private void init() {
this.setTitle("记事本");
menubar = new MenuBar();
menu = new Menu("菜单");
open_menuItem = new MenuItem("打开");
save_menuItem = new MenuItem("保存");
exit_menuItem = new MenuItem("退出");
edit_Area = new JTextArea();
jspane = new JScrollPane(edit_Area);
// 分别设置水平和垂直滚动条自动出现
jspane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jspane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
// //分别设置水平和垂直滚动条总是出现
// jspane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
// jspane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
//
// //分别设置水平和垂直滚动条自动出现总是隐藏
// jspane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
// jspane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
// 添加对应组件
this.add(jspane);
menu.add(open_menuItem);
menu.add(save_menuItem);
menu.add(exit_menuItem);
menubar.add(menu);
// 设置窗体菜单栏 如果要添加其他菜单直接menbar.add()即可
this.setMenuBar(menubar);
// 设置文件可打开跟保存窗口
open_fileDialog = new FileDialog(this, "打开", FileDialog.LOAD);
save_fileDialog = new FileDialog(this, "保存", FileDialog.SAVE);
this.setBounds(200, 300, 500, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null); // 设置显示在中央
this.setVisible(true);
}
public static void main(String[] args) {
new Notepad();
}
}