摘 要
为了使自己熟悉Java编译,了解更多的面向对象语言的编程策略。进而,深入了解Java语言的操作、及原理等。因此我开发了一个记事本,使自己可以巩固知识,加深记忆。设计一个简易记事本,能够记录使用者输入的信息,同时可以实现保存输入的信息,以方便后期查看。同时可以支持保存后后期的修改,那就是插入文件后再次修改。在此款简易记事里面,可以写文档,同时也可以保存、删除等功能。可以在记事本里面更换字体颜色,字体也可以变换大小。同时也可以打开文件夹里面的文档。里面字体设置的是宋体。
关键词 JAVA io流 容器 组件 GUI
第一章 概述
1.1 引言
记事本是一个很用的程序,主要包括对文件的储存、修改等编辑功能;还有复制、粘贴等。同时在此记事本可以改变字体大小颜色等。
1.2 设计背景
1.2.1Java简介
Java具有以下特点,是目前软件设计中优秀的编程语言。Java不仅可以用来开发大型的应用程序,而且特别适合于Internet的开发。Java确实具备了“一旦携程处处可用”的特点,这也是Java最初风靡全球的原因。
1.2.2Java语言特点
- 简单性:因为Java在C++之上设计出来的,设计者把C++的一些特性去掉了,这些特性在实际开发中,程序员也很少用到。
- 面向对象:Java是一款面向对象化语言。
- 平台无关:Java语言和其他语言相比,最大的优势就是编写的软件能在执行码上兼容,在所有的计算机上运行。(只要平台提供了Java运行的环境,Java编写的软件就能在其上运行。)
- 多线程:内置对多线程的支持。多线程允许同时完成多个任务。
- 多态
第二章 总体设计
2.1 界面设计
在主界面中设计一个JFrame 容器,并在其中加入文本域、下拉菜单等。
2.2 功能设计
首先建立框架,确定好设计的内容。根据内容找到相应的资料后,开始编写代码。
框架流程图
2.3 系统功能设计
2.3.1 功能设计
在下拉菜单中加入子菜单进行监视,分别实现对文件的操作功能。点击不同的菜单选项时,进行不同的操作。
功能框架流程图
2.3.3 代码设计
编写每个控件的相关代码,并进行调试。
创建了一个标题为“简易记事本”的窗口,包括菜单条,菜单,菜单项。找准每个大类和他相对应的子类然后对其实现功能。
- 对文件的新建、打开、保存、另存、退出。
- 对文本复制、粘贴等
- 对字体的大小改变,颜色改变
第三章 详细设计
3.1 开发工具的选用及其介绍
3.1.1界面设计
先创建一个GUI界面,再往里面依次填东西,首先是窗口,设置窗口的大小,填入文本区域,设置在里面的字体,添面板、菜单条。菜单条里面增加菜单,菜单里面加入菜单项,然后分别给菜单项设置一些功能。
3.1.2 界面调试
确定主窗体,设置窗体的属性,对窗体进行布局,加入所需控件并对控件进行初始化。在完成加入菜单控件后,不能缺少setJMenuBar(cdl); 因为这是让菜单条可见。把menubar设置到JFame中。
3.1.2 界面调试
确定主窗体,设置窗体的属性,对窗体进行布局,加入所需控件并对控件进行初始化。在完成加入菜单控件后,不能缺少setJMenuBar(cdl); 因为这是让菜单条可见。把menubar设置到JFame中。
3.2 详细模块设计
3.2.1打开、使用
功能说明
利用代码运行成功后,打开窗口。既可以输入文字。在输入文字的同时可以选择文字的颜色、字体等。完成后可以选择保存等功能。在文本区域可以选择复制粘贴等功能来完成最后的结果。
程序代码
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.*;
public class note {
public static void main(String[] args) {
creatGUI();
}
public static void creatGUI() {
//创建可视化窗口/
JFrame f = new JFrame("记事本");
//设定显示位置,左上角为(0,0),根据笔记本电脑的显示分辨率设置成在正中间显示
f.setLocation(200, 100);//这是显示窗口的左上角坐标
//设定窗口大小为屏幕1/2倍(电脑显示分辨率)
f.setSize(800, 540);//我电脑显示分辨率为1920*1080
//创建文本域用来打字显示出来的
JTextArea WBY = new JTextArea("");
//这里可以输入东西到时候打开窗体自动显示出来
WBY.setFont(new Font("", Font.BOLD, 25));
//设置文本域为自动换行
WBY.setLineWrap(true);
//将文本域添加到含有下拉框的面板中,因为文本区不带滚动条,
//需要把文本区放到滚动窗格中,
JScrollPane MB = new JScrollPane(WBY);
//将含有下拉框的面板放入内容面板中
f.add(MB);
//创建一个菜单栏,实例化
JMenuBar cdl = new JMenuBar();
//创建菜单栏上的5个菜单并且设置字体和大小
JMenu m1 = new JMenu("文件");
JMenu m2 = new JMenu("编辑");
JMenu m3 = new JMenu("字体大小");
JMenu m4 = new JMenu("字体颜色");
JMenu m5 = new JMenu("帮助文档");
m1.setFont(new Font("", Font.BOLD, 15));
m2.setFont(new Font("", Font.BOLD, 15));
m3.setFont(new Font("", Font.BOLD, 15));
m4.setFont(new Font("", Font.BOLD, 15));
m5.setFont(new Font("", Font.BOLD, 15));
//在菜单的基础上创建下拉可选菜单项按钮
JMenuItem x1 = new JMenuItem("新建");
JMenuItem x2 = new JMenuItem("保存");
JMenuItem x3 = new JMenuItem("打开");
JMenuItem x4 = new JMenuItem("退出");
JMenuItem x5 = new JMenuItem("复制");
JMenuItem x6 = new JMenuItem("粘贴");
JMenuItem x7 = new JMenuItem("裁剪");
JMenuItem x8 = new JMenuItem("删除");
JMenuItem x9 = new JMenuItem("大");
JMenuItem x10 = new JMenuItem("中");
JMenuItem x11 = new JMenuItem("小");
JMenuItem x12 = new JMenuItem("红色");
JMenuItem x13 = new JMenuItem("绿色");
JMenuItem x14 = new JMenuItem("蓝色");
JMenuItem x15 = new JMenuItem("黑色");
JMenuItem x16 = new JMenuItem("百度");
//为下拉可选菜单项设置字体和大小
x1.setFont(new Font("s", Font.BOLD, 20));
x2.setFont(new Font("s", Font.BOLD, 20));
x3.setFont(new Font("s", Font.BOLD, 20));
x4.setFont(new Font("s", Font.BOLD, 20));
x5.setFont(new Font("s", Font.BOLD, 20));
x6.setFont(new Font("s", Font.BOLD, 20));
x7.setFont(new Font("s", Font.BOLD, 20));
x8.setFont(new Font("s", Font.BOLD, 20));
x9.setFont(new Font("s", Font.BOLD, 40));
x10.setFont(new Font("s", Font.BOLD, 30));
x11.setFont(new Font("s", Font.BOLD, 20));
x12.setFont(new Font("s", Font.BOLD, 20));
x13.setFont(new Font("s", Font.BOLD, 20));
x14.setFont(new Font("s", Font.BOLD, 20));
x15.setFont(new Font("s", Font.BOLD, 20));
x16.setFont(new Font("s", Font.BOLD, 20));
//给颜色下拉菜单项分别设置相应的背景色,这样展现就会直观一点了
x12.setBackground(Color.RED);
x13.setBackground(Color.GREEN);
x14.setBackground(Color.BLUE);
x15.setBackground(Color.BLACK);
//实现新建记事本按钮的功能
x1.addActionListener(e -> {
creatGUI();
});//再次调用该方法创建另外一个记事本
//实现保存记事本按钮的功能
x2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e2) {
//创建一个窗体并且设置窗体标题和保存功能
FileDialog fileDialog = new FileDialog(f, "保存文件至", FileDialog.SAVE);
//保存文件的对话框设置为可见
fileDialog.setVisible(true);
//获取保存的路径和设置的文件名
String absPath = fileDialog.getDirectory() + fileDialog.getFile();
try {//用来检测是否设置了保存路径
//设置输出文件名为保存的路径下面的文件名
BufferedWriter wr = new BufferedWriter(new FileWriter(absPath));
//获取文本域字符串
String s = WBY.getText();
//开始写入
wr.write(s);
//写完关闭
wr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
//实现打开记事本按钮的功能
x3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e2) {
//创建一个窗体并且设置窗体标题和打开功能
FileDialog fileDialog = new FileDialog(f, "打开文件", FileDialog.LOAD);
//打开文件的对话框设置为可见
fileDialog.setVisible(true);
//获取打开的路径和设置的文件名
String absPath = fileDialog.getDirectory() + fileDialog.getFile();
try {//用来检测是否设置了打开路径
//设置读入文件名为打开的路径下面的文件名
BufferedReader re = new BufferedReader(new FileReader(absPath));
String line;
while ((line = re.readLine()) != null)
//只要文件中不为空就不断追加到文本框中
WBY.append(line + '\n');
//读取完毕结束
re.close();
} catch (Exception e) {
e.printStackTrace();
}
}
});
//实现退出记事本按钮的功能
x4.addActionListener(e -> System.exit(0));
//调用文件工具箱下的系统剪贴板方法
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
//实现复制文本按钮的功能
x5.addActionListener(e -> {
//将选中的文本内容存入text中
String text = WBY.getSelectedText();
//传送到字符串里面存着
StringSelection selection = new StringSelection(text);
//将得到的内容放入到剪切板中
clipboard.setContents(selection, null);
});
//实现粘贴文本按钮的功能
x6.addActionListener(e -> {
//获取系统剪贴板中的内容
Transferable text = clipboard.getContents(null);
//判断剪贴板中的内容是否支持文本
if (text.isDataFlavorSupported(DataFlavor.stringFlavor)) {
try {
//强制转换剪贴板中的内容
String text1 = (String) text.getTransferData(DataFlavor.stringFlavor);
//获取当前光标的位置
int n = WBY.getCaretPosition();
//插入复制的内容到文本框的光标后面
WBY.insert(text1, n);
} catch (Exception e2) {
e2.printStackTrace();
}
}
});
//实现裁剪文本按钮的功能
x7.addActionListener(e -> {
//将得到的选择文本内容存入text中
String text = WBY.getSelectedText();
//传送到字符串里面存着
StringSelection selection = new StringSelection(text);
//将得到的内容放到剪切板中
clipboard.setContents(selection, null);
//将选中文本start到end之间的内容替换为空白""
WBY.replaceRange("", WBY.getSelectionStart(), WBY.getSelectionEnd());
});
//实现删除文本按钮的功能
x8.addActionListener(e -> {
//将选中文本start到end之间的内容替换为空白
WBY.replaceRange("", WBY.getSelectionStart(), WBY.getSelectionEnd());
});
//实现字体变大的功能
x9.addActionListener(e -> {
WBY.setFont(new Font("", Font.BOLD, 40));
});
//实现字体变中等大小的功能
x10.addActionListener(e -> {
WBY.setFont(new Font("", Font.BOLD, 30));
});
//实现字体变小的功能
x11.addActionListener(e -> {
WBY.setFont(new Font("", Font.BOLD, 20));
});
//实现字体颜色变红的功能
x12.addActionListener(e -> {
WBY.setForeground(Color.RED);
});
//实现字体颜色变绿的功能
x13.addActionListener(e -> {
WBY.setForeground(Color.GREEN);
});
//实现字体颜色变蓝的功能
x14.addActionListener(e -> {
WBY.setForeground(Color.BLUE);
});
//实现字体颜色变黑的功能
x15.addActionListener(e -> {
WBY.setForeground(Color.BLACK);
});
//实现打开帮助文档的功能
x16.addActionListener(e -> {
//创建消息提示框,包括显示内容和弹窗标题
JOptionPane.showMessageDialog(f,
"百度!", "提示", JOptionPane.INFORMATION_MESSAGE);
});
//分别给5个菜单添加各自的下拉菜单项
m1.add(x1);
m1.addSeparator();//两个菜单项之间添加界线
m1.add(x2);
m1.addSeparator();//两个菜单项之间添加界线
m1.add(x3);
m1.addSeparator();//两个菜单项之间添加界线
m1.add(x4);
m2.add(x5);
m2.addSeparator();//两个菜单项之间添加界线
m2.add(x6);
m2.addSeparator();//两个菜单项之间添加界线
m2.add(x7);
m2.addSeparator();//两个菜单项之间添加界线
m2.add(x8);
m3.add(x9);
m3.addSeparator();//两个菜单项之间添加界线
m3.add(x10);
m3.addSeparator();//两个菜单项之间添加界线
m3.add(x11);
m4.add(x12);
m4.addSeparator();//两个菜单项之间添加界线
m4.add(x13);
m4.addSeparator();//两个菜单项之间添加界线
m4.add(x14);
m4.addSeparator();//两个菜单项之间添加界线
m4.add(x15);
m5.add(x16);
//添加这5个菜单到菜单栏
cdl.add(m1);
cdl.add(m2);
cdl.add(m3);
cdl.add(m4);
cdl.add(m5);
//给窗体添加完善好的菜单栏
f.setJMenuBar(cdl);
//记事本设置为可见
f.setVisible(true);
//点击×号结束应用程序
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}