**

java课程设计《简易记事本》

**
第一次在博客上发布文章。这是我在大二上学期的java课程设计,我的课程设计是做一个简易记事本。其中有这些要求:1. 摸拟windows操作系统中的记事本软件,开发一款简易记事本2. 具有新建文件、保存文件、复制和粘贴功能3. 可以根据自身能力添加其它功能。
一、设计概述
该程序为简易记事本,目的是摸拟windows操作系统中的记事本软件,开发一款简易记事本,是开发的记事本具有新建文件、保存文件、打开文件、复制、剪切、粘贴、设置背景颜色和字体等功能。
本程序使用了窗口交互界面,主要运用了Java swing组件和动作事件监听器,还用到了文件的输入输出流。记事本的界面参考了Window中记事本界面,并且根据课程设计要求做了适当的调整,相应地添加了其他功能。

二、总体设计
2.1程序设计思路
在本程序中,设计了一个菜单栏和文本区。设计过程中用了JMenuBar,JFileChooser,JScrollPane,JMenu等。JMenuBar包括用来制作”文件”,“工具”,“背景”,“字体”,“关于”。JTextArea主要用来输入文本。
2.2总体设计
这次编写的简易记事本一共有4个源文件。类之间的主要关系如图所示。主类是NoteBook;子类有Mytext,BackgroundClorListener,HandkeListener。
NoteBook.java文件生成的类负责创建简易记事本的“窗口”和设置窗口的相关信息。该类含有main方法,整个程序从该类开始执行。
Mytext.java文件生成的类Mytext继承JFrame类作为底层容器,负责添加窗口的组件和为组件添加监视器。整个记事本分为两块菜单栏和内容输入区;为了实现相关功能,添加监听事件。本程序为了实现ActionListener接口,用来监听并处理部分菜单项和内容输入区为事件源的事件。
BackgroundColorListener.java文件生成的类BackgroundColorLisener负责重写监视器方法,实现设置文本区背景颜色的功能。
HandleListener.javajava文件生成的类HandleListener负责重写监视器的方法,负责实现复制、剪切、粘贴的功能。
2.3详细设计代码

//主函数
Jishiben.java
public class Jishiben{public static  void main(String args[]){Mytext text=new Mytext(“&随手一记”,100,90,600,600”);
//创建窗口、设置窗口名称和大小}
}
Mytext.java
//Mytext类
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.*;
import  javax.swing.JFrame.*;
import java.io.*;
import javax.swing.filechooser.*;
public class Mytext extends JFrame implements ActionListener{
JTextArea area;//创建文本区
JMenuBar menubar;//创建菜单条
JButton button;//创建按钮
JFileChooser fileDialog;//创建对话框
BufferedReader in;//创建缓冲输入流
FileReader fileReader;//创建文件字符输入流
BufferedWriter out;//缓冲输出流
FileWriter fileWriter;//创建文件字符输出流
JMenu menu1,menu2,menu3,menu4,menu5,menu6,menu7,menu8,menu9;//创建菜单、子菜单
JmenuItem item1,item2,item3,item4,item5,item6,item7,item8,item9,item10,item11,item12,item13,
item14,item15,item16,item17,item18,item19,item20,item21,item22,item23,item24,
item25,item26,item27,item28,item29;//创建菜单项
//添加组件方法
public  Mytext(String s,int x,int y,int h,int w){init(s);setLocation(x,y);setSize(h,w);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//使用结束后释放该窗口,退出程序}void init(String s){setTitle(s);menubar=new JMenuBar();
button=new JButton();area=new JTextArea();menu1=new JMenu("文件(File)");menu2=new JMenu("工具(Tool)");menu3=new JMenu("颜色(Color)");menu4=new JMenu("背景(Background)");menu5=new JMenu("字体(Font)");menu6=new JMenu("字号");menu7=new JMenu("字形");menu8=new JMenu("恢复原字体");menu9=new JMenu("关于");item1=new JMenuItem("复制(Copy)");
item2=new JMenuItem("剪切(Cut)");item3=new JMenuItem("粘贴(Paste)");item4=new JMenuItem("新建(Newset)");item5=new JMenuItem("保存(Paste)");item6=new JMenuItem("灰色(Gray)");item7=new JMenuItem("粉色(Pink)");item8=new JMenuItem("白色(White)");item9=new JMenuItem("红色(Red)");item10=new JMenuItem("黑色(Black)");item11=new JMenuItem("绿色(Green)");item12=new JMenuItem("黄色(Yellow)");item13=new JMenuItem("粉色(Pink)");item14=new JMenuItem("白色(White)");item15=new JMenuItem("红色(Red)");item16=new JMenuItem("黑色(Black)");item17=new JMenuItem("绿色(Green)");item18=new JMenuItem("黄色(Yellow)");item19=new JMenuItem("30");item20=new JMenuItem("40");item21=new JMenuItem("50");item22=new JMenuItem("加粗");item23=new JMenuItem("楷体");item24=new JMenuItem("华文新魏");item25=new JMenuItem("行书");item26=new JMenuItem("格式化");item27=new JMenuItem("相关提示");item28=new JMenuItem("退出(格式化)");item29=new JMenuItem("打开(Open)");area.setLineWrap(true);//自动换行button.add(item28);add(button,BorderLayout.SOUTH);//添加按钮,在南面
add(new JScrollPane(area),BorderLayout.CENTER);
//创建滚动条,将文本区在中间位置,BordedLayout布局area.setFont(new Font("宋体",0,20));//默认字体为宋体,0是不加粗字体,1是加粗的,字号为20fileDialog=new JFileChooser();FileNameExtensionFilter filter=new FileNameExtensionFilter("文本文件","html","java");//文件对话框可见的类型fileDialog.setFileFilter(filter);//设置对话框默认打开或显示的文件类型item1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));//设置复制的功能的快捷键为Ctrl+C
item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK));
//设置剪切的功能的快捷键为Ctrl+Q
item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
//设置粘贴的功能的快捷键为Ctrl+V
item4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
//设置新建的功能的快捷键为Ctrl+N
item5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
//设置保存的功能的快捷键为Ctrl+P
item5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
//设置打开的功能的快捷键为Ctrl+O
item28.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK));
//设置的功能的快捷键为Ctrl+T
item1.setActionCommand("copy");
//设置出发item1事件后封装到事件中的一个为"copy"字符串
item2.setActionCommand("cut");
//设置出发item2事件后封装到事件中的一个为"cut"字符串
item3.setActionCommand("paste");
//设置出发item3事件后封装到事件中的一个为"paste"字符串
item6.setActionCommand("gray");
//设置出发item6事件后封装到事件中的一个为"gray"字符串
item7.setActionCommand("pink");
//设置出发item7事件后封装到事件中的一个为"pink"字符串
item8.setActionCommand("white");
//设置出发item8事件后封装到事件中的一个为"white"字符串
item9.setActionCommand("red");
//设置出发item9事件后封装到事件中的一个为"red"字符串
item10.setActionCommand("black");
//设置出发item10事件后封装到事件中的一个为"black"字符串
item11.setActionCommand("green");
//设置出发item11事件后封装到事件中的一个为"green"字符串
item12.setActionCommand("yellow");
//设置出发item12事件后封装到事件中的一个为"yellow"字符串menu2.add(item1);//添加菜单项menu2.addSeparator();//设置分格条,下面的都一样menu2.add(item2);menu2.addSeparator();menu2.add(item3);menu1.add(item4);menu1.addSeparator();menu1.add(item5);menu1.addSeparator();menu1.add(item29);menu3.add(item13);menu3.addSeparator();menu3.add(item14);menu3.addSeparator();menu3.add(item15);menu3.addSeparator();menu3.add(item16);menu3.addSeparator();menu3.add(item17);menu3.addSeparator();menu3.add(item18);menu4.add(item6);menu4.addSeparator();menu4.add(item7);menu4.addSeparator();menu4.add(item8);menu4.addSeparator();menu4.add(item9);menu4.addSeparator();menu4.add(item10);menu4.addSeparator();menu4.add(item11);menu4.addSeparator();menu4.add(item12);menu6.add(item19);menu6.addSeparator();menu6.add(item20);menu6.addSeparator();menu6.add(item21);menu7.add(item22);menu7.addSeparator();menu7.add(item23);menu7.addSeparator();menu7.add(item24);menu7.addSeparator();menu7.add(item25);menu8.add(item26);menu9.add(item27);menu5.add(menu3);menu5.add(menu6);menu5.add(menu7);menu5.add(menu8);menubar.add(menu1);menubar.add(menu2);menubar.add(menu4);menubar.add(menu5);menubar.add(menu9);setJMenuBar(menubar);//设置菜单条
HandleListener handleListener=new  HandleListener();//创建复制、剪切、粘贴监视器对象
colorListener=new BackgroundColorListener();//创建灰、粉、白、红、黑、绿、黄监视器对象
handleListener.setInputText(area);
colorListener.setInputText(area);
item1.addActionListener(handleListener);//item1将handleListener注册为监视器
item2.addActionListener(handleListener);//item2将handleListener注册为监视器
item3.addActionListener(handleListener);//item3将handleListener注册为监视器
item4.addActionListener(this);//动作监视器this是指当前对象,不能被子类继承
item5.addActionListener(this);
item29.addActionListener(this);
item6.addActionListener(colorListener);//item6将colorListener注册为监视器
item7.addActionListener(colorListener);//item7将colorListener注册为监视器
item8.addActionListener(colorListener);//item8将colorListener注册为监视器
item9.addActionListener(colorListener);//item9将colorListener注册为监视器
item10.addActionListener(colorListener);//item10将colorListener注册为监视器
item11.addActionListener(colorListener);//item11将colorListener注册为监视器
item12.addActionListener(colorListener);//item12将colorListener注册为监视器
item13.addActionListener(this);//动作监视器this是指当前对象
item14.addActionListener(this);
item15.addActionListener(this);
item16.addActionListener(this);
item17.addActionListener(this);
item18.addActionListener(this);
item19.addActionListener(this);
item20.addActionListener(this);
item21.addActionListener(this);
item22.addActionListener(this);
item23.addActionListener(this);
item24.addActionListener(this);
item25.addActionListener(this);
item26.addActionListener(this);
item27.addActionListener(this);
item28.addActionListener(this);
}
//下面是实现菜单里菜单项新建和保存的功能的方法
public void actionPerformed(ActionEvent e){
if(e.getSource()==item4){//监听"新建”事件
int state=fileDialog.showOpenDialog(this);// 显示文件选取的对话框
if(state==JFileChooser.APPROVE_OPTION){// 如果使用者按下确认键
{area.setText(null);//将文本清空area.setBackground(Color.white);
area.setForeground(Color.black);}
try{
File dir=fileDialog.getCurrentDirectory();//获取当前对话框
String name=fileDialog.getSelectedFile().getName();
File file=new File(dir,name);//获取目录和文件名
fileReader=new FileReader(file);
in=new BufferedReader(fileReader);//创建文件的输出流
String s=null;
while((s=in.readLine())!=null){//从文件中读取一行文本
area.append(s+"\n");}
in.close();
fileReader.close();//关闭输入流}
catch(IOException exp){}//捕获文件读写发生的异常
}
else if(e.getSource()==item5){//监听保存事件int state=fileDialog.showSaveDialog(this);
if(state==JFileChooser.APPROVE_OPTION){try{File dir=fileDialog.getCurrentDirectory();//获取当前对话框String name=fileDialog.getSelectedFile().getName();File file=new File(dir,name);fileWriter=new FileWriter(file);//写入字符文件out=new BufferedWriter(fileWriter);//将文本写入字符输出流out.write(area.getText());//获取文本区文字写入目的地
out.flush();//强制把缓冲区里的内容写到目的地out.close();fileWriter.close();//关闭}catch(IOException exp){}//捕获文件读写发生的异常}
}
else if(e.getSource()==item29){//监听"打开"事件int state=fileDialog.showOpenDialog(this);if(state==JFileChooser.APPROVE_OPTION){area.setText(null);try{File dir=fileDialog.getCurrentDirectory();String name=fileDialog.getSelectedFile().getName();File file=new File(dir,name);fileReader=new FileReader(file);in=new BufferedReader(fileReader);String s=null;while((s=in.readLine())!=null){area.append(s+"\n");}in.close();fileReader.close();//关闭流}catch(IOException exp){}//捕获文件读写发生的异常}
else if(e.getSource()==item13){//监听"文字粉色"事件area.setForeground(Color.pink);
}
else if(e.getSource()==item14){//监听"文字白色"事件area.setForeground(Color.white);
}
else if(e.getSource()==item15){//监听"文字红色"事件area.setForeground(Color.red);
}
else if(e.getSource()==item16){//监听"文字黑色"事件area.setForeground(Color.black);
}
else if(e.getSource()==item17){//监听"文字绿色"事件area.setForeground(Color.green);
}
else if(e.getSource()==item18){//监听"文字黄色"事件area.setForeground(Color.yellow);
}
else if(e.getSource()==item19){//监听"Size30"事件area.setFont(new Font("宋体",0,30));
}
else if(e.getSource()==item20){//监听"Size40"事件area.setFont(new Font("宋体",0,40));
}
else if(e.getSource()==item21){//监听"Size50"事件area.setFont(new Font("宋体",0,50));
}
else if(e.getSource()==item22){//监听"文字加粗"事件area.setFont(new Font("宋体",1,20));
}
else if(e.getSource()==item23){//监听"楷体"事件area.setFont(new Font("楷体",0,20));
}
else if(e.getSource()==item24){//监听"华文新魏"事件area.setFont(new Font("华文新魏",0,20));
}
else if(e.getSource()==item24){//监听"行书"事件area.setFont(new Font("行书",0,20));
}
else if(e.getSource()==item26){//监听"恢复原设置"事件
{area.setFont(new Font("宋体",0,20));area.setBackground(Color.white);area.setForeground(Color.black);}}
else if(e.getSource()==item28){监听"退出"事件area.setText(null);
}
else if(e.getSource()==item27){监听"相关提示"事件
{ area.setBackground(Color.pink);//默认背景颜色为白色area.setForeground(Color.black);//默认字体颜色为黑色
area.setFont(new Font("新文华谓",1,20));
area.append("该程序存在很多不足之处,建议使用前建议查询该网站了解相关信息\n");
area.append("该网址是:https://...\n");
int n=JOptionPane.showConfirmDialog(this,"您是否要复制该网址","温馨提示",JOptionPane.YES_NO_OPTION);//显示确认对话框
if(n==JOptionPane.YES_OPTION){//用户单击对话框上的按钮“是”
area.append("【注意】1、复制网址后,使用快捷键Ctrl+T,也可以继续编写文件。\n");
area.append("谢谢您的使用!");
}
if(n==JOptionPane.NO_OPTION)//用户单击对话框上的按钮“是”area.setText(null);}}}
}
BackgroundColorListener.java
//BackgroundListener
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
//下面是实现背景颜色设置功能的方法
public class BackgroundColorListener  implements ActionListener{
JTextArea area;
public void setInputText(JTextArea text){
area=text;
}
public void actionPerformed(ActionEvent e){
String str=e.getActionCommand();
if(str.equals("gray"))
area.setBackground(Color.gray);
else if(str.equals("pink"))
area.setBackground(Color.pink);
else if(str.equals("white"))
area.setBackground(Color.white);
else if(str.equals("black"))
area.setBackground(Color.black);
else if(str.equals("green"))area.setBackground(Color.green);
else if(str.equals("yellow"))area.setBackground(Color.yellow);
else if(str.equals("red"))
area.setBackground(Color.red);}
}
HandleListener.java
//HandleListener类
import java.awt.event.*;
import javax.swing.*;
//下面是实现工具里菜单项”复制”、剪切和粘贴的功能的方法
public class HandleListener  implements ActionListener{
JTextArea area;
public void setInputText(JTextArea text){
area=text;
}
public void actionPerformed(ActionEvent e){
String str=e.getActionCommand();
if(str.equals("copy"))area.copy();
else if(str.equals("cut"))area.cut();
else if(str.equals("paste"))area.paste();
}
}

4.1问题及解决办法
(1)在文本区加入滚动条,该语句是:JScrollPane p=new JscrollPane();area.add§;运行后发现并没有滚动条;在看书查询后知道了不能直接添加,需要将窗格添加到面板,再将面板添加到文本区,这样才能成功的加入滚动条;后来被语句改为最简短的语add(new JScrollPane(area),BorderLayout.CENTER);
滚动条已加入文本区。
(2)为了是该记事本增加背景颜色和字体颜色的功能,一开始想一种颜色用一个菜单项就可以加入到菜单“背景”和“字体”中的,经过好多次运行发现这种办法是不可行的。后来只能多创建几个菜单项来分别引用。
(3)在实现新建、保存和打开的功能的方法时,原打算和实现复制剪切粘贴功能一样新建一个java文件来实现这些功能的;运行后发现不可行,getActionCommand()对于文本框,当发生ActionEvent事件时,默认的字符串是文本框中的文本,并不是事件源对象的引用;因此就用关键字this作为新建、保存和打开的监视器,this指的是当前对象,可以调用getSource()方法可以获取发生ActionListener事件的事件源对象的引用,这样才能调用getCurrentDirectory()、showOpenDialog()等方法,这样才能实现新建、保存和粘贴功能。
4.2存在不足
(1)功能不全面,背景颜色不能保存到文件中
(2)在增加字体这一功能设计还不够好
(3)代码太长,不够精简
五 心得体会
经过努力,基本上完成我的Java课程设计一简单的记事本程序。也基本上实现了老师需求分析时所预期的功能。在这次课程设计中,我遇到了很多问题,也学会了解决这些问题的方法。通过这次的课程设计,使将我从技本上学习到的理论知识用到了实践上.从而进一步巩固和丰富了我所学过的知识,让我更深层次地认识到Java及其强大的功能。虽然过程有点难,但做这Java课程设计也进-步加强了我的动手能力和提高了我的兴趣。为了完成好这次课程设计,我一边上网查找相关资料,另一方面查阅相关书籍。在这过程中也无形中锻炼了我的思维分析、遇到问题及想方设法通过各种途径解决问题的能力。

第一次写博客文章,有很多不足,希望大家多多指教

java课程设计简易记事本相关推荐

  1. Java课程设计-日历记事本

    #Java课程设计-日历记事本 ##日历记事本 要求:带有日程提醒功能的日历(数据库可采用Access.SQL Server或者MySQL). (1)显示信息:用户可以向前翻页查询前一个月的日期,也可 ...

  2. java课程设计日历记事本_《Java程序设计》课程设计日历记事本.doc

    <Java程序设计>课程设计日历记事本 PAGE PAGE 2 本科生课程设计 课程名称 Java程序设计课程设计 课程编号 j1620011 题目 日历记事本 学号 2008116222 ...

  3. Java课程设计简易绘图板_Java课程设计:高级绘画板的多功能实现(多种颜色图形)...

    课程题目描述 利用GUI方法实现一个较为简单的绘图应用程序.用户可以选择要画的图形(如线,椭圆或圆,矩形),选择方式不限,例如单选按钮.下拉框.菜单等方式,可以选择画笔颜色和画笔粗细,用鼠标单击和拖曳 ...

  4. java课程设计日历记事本代码,已开源

    1.为什么要使用分布式锁 使用分布式锁的目的,无外乎就是保证同一时间只有一个客户端可以对共享资源进行操作. 1.1举一个很长的例子 系统 A 是一个电商系统,目前是一台机器部署,系统中有一个用户下订单 ...

  5. java课程设计日历_java课程设计日历记事本赵锐.doc

    java课程设计日历记事本赵锐.doc 2本科生课程设计课程名称JAVA程序设计课程设计题目日历记事本学号201440930252学生姓名赵锐所在专业2014计算机学院所在班级信工2班成绩课程设计时间 ...

  6. 华北科技学院java考试题_华北科技学院java课程设计报告简易计算器

    华北科技学院java课程设计报告简易计算器 华北科技学院计算机系综合性实验 实 验 报 告 课程名称 Java程序设计B 实验学期 2011 至 2012 学年 第 1 学期 学生所在系部 计算机学院 ...

  7. 简易抽奖系统(Java课程设计/大作业)

    简易抽奖系统(Java课程设计/大作业) package 简易抽奖系统; import java.awt.*; import java.awt.event.ActionEvent; import ja ...

  8. java课程设计 计算器_java课程设计-保存计算过程的计算器

    java课程设计-保存计算过程的计算器 编号: <面向对象程序设计(JAVA) > 课程设计(论文)档案 题 目: 保存计算过程的计算器 学 院: 信息学院 专 业: 姓 名: 学 号: ...

  9. c语言课程设计文本编辑器实验报告6,C课程设计简易文本编辑器.doc

    C课程设计简易文本编辑器 目录 第一章 课程设计目的和要求1 1.1课程设计的目1 1.2 基本要求1 第二章 课程设计任务内容2 2.1 设计背景2 2.2简易文本编辑器设计内容2 第三章 详细设计 ...

  10. java课程设计 博客园_Java课程设计博客(团队)

    Java课程设计博客(团队) 1. 团队/项目名称 使用JAVA实现简易HTTP服务器 2. 团队成员 组长:林一心 组员:张杭镖 3. 项目git地址 4. 项目git提交记录截图 5. 项目功能架 ...

最新文章

  1. Nature子刊:来自人类肠道菌群的189,680种DNA病毒基因组集
  2. 汉川一中2021高考成绩查询,2021年汉川市高考状元名单资料,今年汉川市高考状元多少分...
  3. JS 小数的常用处理方法
  4. Qt Creator寻找
  5. c语言 java append_C++中append函数的用法和函数定义。谢谢!
  6. 服务器系统时间提前八小时,windows服务器时间少八小时
  7. 【仿真】Proteus8.9 下载与安装教程(超详细)
  8. 第十二届蓝桥杯题目和解答(C++B组)省赛
  9. 中国各省所处的经纬度范围
  10. 基于51单片机的智能温控风扇设计
  11. 新知实验室 TRTC实时音视频通讯方案在业内的QoS水平
  12. 第1060期AI100_机器学习日报(2017-08-13)
  13. optionnally mysql_关于Tomcat与MySQL连接池问题的解析!
  14. [内核分析]LXR安装心得(0.9.1版)
  15. c++primerplus6notes
  16. G003-186-07
  17. 浅谈Object.assign
  18. iOS开发系列-音频、视频以及摄像
  19. play framework 提示:VerifyError错误
  20. 在Linux中安装ALSA声卡驱动

热门文章

  1. MIT-JOS系列5:用户环境(一)
  2. QQ音乐文件缓存位置以及修改方法步骤
  3. Linux连接网络的方法
  4. Unity基础——List的用法
  5. hive中操作hdfs命令
  6. SketchUp最适用新手的二十多款SU插件
  7. Linux学习笔记(尚硅谷韩顺平老师2021最新Linux教程)万字笔记
  8. SONY图像传感器列表
  9. 盘点全球8K视频直播的解决方案和成果
  10. python代码之飞机大战完整版(附带image素材资源)