java实现的简单记事本程序
2013-04-13 19:48
489 查看
//练习:利用GUI知识,和IO流知识,做一个简单的记事本程序。
//代码:
package cn.itcast.exercise;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
public class Notepad extends Frame {
private static final long serialVersionUID = 1L;
private MenuItem openMenuItem; // 由于多个方法中都使用, 定义为成员变量
private MenuItem saveMenuItem;
private MenuItem exitMenuItem;
private TextArea textArea;
private MenuItem gbkMenuItem;
private MenuItem utf8MenuItem;
private File file;
private String charset = "GBK";
public static void main(String []args){
new Notepad();
}
public Notepad() {
init(); // 初始化
generateMenuBar(); // 构建菜单栏
generateTextArea(); // 构建文本域
handleMenuItemEvent(); // 处理菜单项点击事件
setVisible(true);
}
private void init() { // 初始化, 设置大小和位置, 处理关闭事件
setTitle("记事本");
setSize(600, 400);
setLocation(400, 100);
setIconImage(Toolkit.getDefaultToolkit().createImage("300png059.png"));
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private void generateMenuBar() {
MenuBar menuBar = new MenuBar(); // 菜单栏
Menu fileMenu = new Menu("文件"); // 菜单
Menu editMenu = new Menu("编辑");
Menu viewMenu = new Menu("查看");
openMenuItem = new MenuItem("打开");
saveMenuItem = new MenuItem("保存");
exitMenuItem = new MenuItem("退出");
MenuItem copyMenuItem = new MenuItem("复制");
MenuItem pasteMenuItem = new MenuItem("粘贴");
MenuItem cutMenuItem = new MenuItem("剪切");
gbkMenuItem = new MenuItem("GBK");
utf8MenuItem = new MenuItem("UTF-8");
fileMenu.add(openMenuItem); // 给菜单添加菜单项
fileMenu.add(saveMenuItem);
fileMenu.addSeparator(); // 分隔符
fileMenu.add(exitMenuItem);
editMenu.add(copyMenuItem);
editMenu.add(pasteMenuItem);
editMenu.add(cutMenuItem);
viewMenu.add(gbkMenuItem);
viewMenu.add(utf8MenuItem);
menuBar.add(fileMenu); // 给菜单栏添加菜单
menuBar.add(editMenu);
menuBar.add(viewMenu);
setMenuBar(menuBar); // 把菜单栏添加到窗体中
// 如果需要构建子级菜单, 那么可以在Menu中放Menu, 然后内部的Menu再放MenuItem
}
private void generateTextArea() {
textArea = new TextArea(); // 创建文本域
textArea.setFont(new Font("Courier New", Font.PLAIN, 15)); // 指定字体
add(textArea); // 添加到窗体中
textArea.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_O) // 判断快捷键
open();
if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S)
save();
}
});
}
private void handleMenuItemEvent() {
exitMenuItem.addActionListener(new ActionListener() { // 当菜单项被选择时关闭窗口
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
openMenuItem.addActionListener(new ActionListener() { // 当菜单项被选择时弹出对话框
public void actionPerformed(ActionEvent e) {
open();
}
});
saveMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
save();
}
});
gbkMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
charset = "GBK";
loadFile(file);
}
});
utf8MenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
charset = "UTF-8";
loadFile(file);
}
});
}
private void open() {
// 弹出一个对话框
FileDialog dialog = new FileDialog(this, "打开", FileDialog.LOAD);
dialog.setVisible(true);
// 获取选中的文件路径
String dir = dialog.getDirectory();
String name = dialog.getFile();
if (dir != null && name != null) {
loadFile(new File(dir, name)); // 读取文件内容, 转为String, 显示在TextArea中
}
}
private void loadFile(File file) {
this.file = file;
try (
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) // 从文件中读取数据, 写到内存
baos.write(buffer, 0, len);
String content = new String(baos.toByteArray(), charset); // 获取内存中所有数据, 转为String
textArea.setText(content); // 把文件内容放到TextArea中
} catch (Exception e) {
e.printStackTrace();
}
}
private void save() {
FileDialog dialog = new FileDialog(this, "保存", FileDialog.SAVE); // 如果选择已存在文件, 会有提示
dialog.setVisible(true);
String dir = dialog.getDirectory();
String name = dialog.getFile();
if (dir != null && name != null) {
saveFile(new File(dir, name)); // 把TextArea中的文本写入到指定的File中
}
}
private void saveFile(File file) {
String content = textArea.getText();
try (
FileWriter fw = new FileWriter(file);
) {
fw.write(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
相关文章推荐
- 黑马程序员_java小程序——实现简单记事本的打开保存功能
- Java基于UDP协议实现简单的聊天室程序
- 【Java】Swing+IO流实现一个简单的文件加密程序(较完整版)
- 用Java实现一个简单的服务器与客户端程序
- java实现简单TCP聊天程序
- java程序简单实现输出文件大小
- 【Java】Swing+IO流实现一个简单的文件加密程序(demo版)
- 用记事本写一个简单的java程序
- 用java实现的一个简单的定时报警程序
- hadoop, 用java 和 python 实现 worldcount 简单单词提取累加小程序
- 一种简单的方法在程序中实现透明效果(JAVA)(源代码)
- java语言实现月食过程的简单小程序
- 一个GUI的简单练习-------- Java记事本 简单实现 陆续完善中……
- Java 记事本——今天添加了简单的插入时间和自动换行菜单的实现
- JavaSE写的记事本程序,实现了简单的功能
- 用java实现的一个简单web服务器程序
- 利用java实现一个简单的远程监控程序
- 基于java利用JDOM读取XML文件实现简单留言簿程序
- 【java基础之程序】【一个简单的记事本程序】