摘 要
为了使自己熟悉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);}}