返回

GUI_记事本

发布时间:2023-11-27 08:56:36 211

 

需求:设计简单的记事本程序。其中已实现【打开】【保存】【退出】3个功能。

 

GUI_记事本_文本域

GUI_记事本_输入流_02

 

GUI_记事本_文本域_03

 

GUI_记事本_GUI_04

 

代码如下:

package com.cn.gui.event;
import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.ScrollPane;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import com.cn.gui.util.FrameUtil;
/**
* Author:Liu Zhiyong
* Version:Version_1
* Date:2016年8月13日19:44:16
* Desc:
需求:设计简单的记事本程序。其中已实现【打开】【保存】【退出】3个功能。
*/
public class NotePad {
JFrame frame = new JFrame("记事本");

//菜单条
JMenuBar menuBar = new JMenuBar();

//文件菜单
JMenu fileMenu = new JMenu("文件");
JMenu editMenu = new JMenu("编辑");
JMenu aboutMenu = new JMenu("帮助");
JMenu switchMenu = new JMenu("切换工作目录");

//菜单项
JMenuItem openItem = new JMenuItem("打开");
JMenuItem saveItem = new JMenuItem("保存");
JMenuItem exitItem = new JMenuItem("退出");
JMenuItem aboutItem = new JMenuItem("关于");

JMenuItem switchMenuItem1 = new JMenuItem("目录1");
JMenuItem switchMenuItem2 = new JMenuItem("目录2");
JMenuItem switchMenuItem3 = new JMenuItem("目录3");

//文本域
JTextArea textArea = new JTextArea(); //JTextArea()中输入只有"\n",所以后面需要替换改成"\r\n"
// TextArea textArea = new TextArea();//TextArea()中输入带"\r\n", 没有JTextArea的毛病,但是不好看

//滚动条
ScrollPane scrollPane = new ScrollPane();

public void initNotePad(){
//菜单添加菜单项
switchMenu.add(switchMenuItem1);
switchMenu.add(switchMenuItem2);
switchMenu.add(switchMenuItem3);

fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(exitItem);

aboutMenu.add(aboutItem);

//菜单添加菜单
editMenu.add(switchMenu);

//菜单条添加菜单
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(aboutMenu);

//窗体添加菜单条
frame.add(menuBar, BorderLayout.NORTH);

//滚动条添加文本域
scrollPane.add(textArea);
//窗体添加滚动条
frame.add(scrollPane);

//自定义函数工具,初始化窗体
FrameUtil.initFrame(frame, 500, 600);

//给打开openItem添加事件
openItem.addActionListener(new ActionListener() {
FileReader fileReader = null;
@Override
public void actionPerformed(ActionEvent e) {
//打开前先清空文本域
clearTextArea(textArea);
try {
//创建文件对话框
FileDialog fileDialog = new FileDialog(frame, "请选择打开的文件", FileDialog.LOAD);
//设置对话框可见
fileDialog.setVisible(true);

//获取用户选择的路径与要打开文件的文件名
String pathName = fileDialog.getDirectory();
String fileName = fileDialog.getFile();

//创建输入流对象
fileReader = new FileReader(new File(pathName, fileName));
//创建字符缓冲流,读取输入流中的数据
char[] buf = new char[1024];
int length = 0;
while((length = fileReader.read(buf)) != -1){
//将读取到的数据写入到textArea中
textArea.setText(textArea.getText() + new String(buf, 0, length));
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally{
//关闭资源
try {
fileReader.close();
System.out.println("关闭输入流成功");
} catch (IOException e1) {
System.out.println("关闭输入流失败");
e1.printStackTrace();
}
}
}
});

//给保存saveItem添加事件
saveItem.addActionListener(new ActionListener() {
FileOutputStream fileOutputStream = null;
@Override
public void actionPerformed(ActionEvent e) {
try {
//创建文件对话框
FileDialog fileDialog = new FileDialog(frame, "请选择保存的路径", FileDialog.SAVE);
//设置对话框可见
fileDialog.setVisible(true);

//获取用户选择的路径与输入的文件名
String pathName = fileDialog.getDirectory();
String fileName = fileDialog.getFile();

//创建一个输出流对象
fileOutputStream = new FileOutputStream(new File(pathName, fileName));
//获取文本域的内容,把内容写出
String content = textArea.getText();
content = content.replace("\n", "\r\n");//"\n"替换成"\r\n"
fileOutputStream.write(content.getBytes());

} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally{
//关闭资源
try {
fileOutputStream.close();
System.out.println("关闭输出流成功");
} catch (IOException e1) {
System.out.println("关闭输出流失败");
e1.printStackTrace();
}
}
}
});

//给退出菜单项添加事件
exitItem.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
int opt = JOptionPane.showConfirmDialog(frame, "确定退出?");
if(opt == 0){
System.exit(1);//退出jvm 如果参数是0表示正常退出jvm,非0表示异常退出jvm
}else if(opt == 1 || opt == 2){
return;//结束当前函数
}
}
});
}

//清空显示文本域
public static void clearTextArea(JTextArea textArea){
String text = textArea.getText();
if(text != null){
textArea.setText("");
}
}

public static void main(String[] args) {
new NotePad().initNotePad();
}
}

 

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
对象的克隆 2023-11-27 05:52:37