java课程设计报告.docx
- 文档编号:13348171
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:26
- 大小:106.60KB
java课程设计报告.docx
《java课程设计报告.docx》由会员分享,可在线阅读,更多相关《java课程设计报告.docx(26页珍藏版)》请在冰点文库上搜索。
java课程设计报告
Java
课
程
设
计
报
告
专业:
计算机科学与技术
班级:
0820542
学号:
姓名:
用Java设计文本编辑器MyTxt
内容提要:
在本文构造实现了一个文本编辑器MyTxt,主要内容包括:
MyTxt的功能
需求分析;MyTxt的基本设计思路和类的划分;MyTxtr的具体实现。
关键字:
Java、文本编辑器MyTxt
引言:
设计实现一个Java应用程序的过程如下:
(1)功能需求分析。
(2)设计和类划分。
(3)代码编写实现。
本文就按照这个步骤来实现文本编辑器MyTxt的制作。
正文:
1、MyTxt功能需求分析
作为文本编辑器,至少应该具备以下几种功能:
(1)所见即所得的文本输入。
(2)方便的选中文本、复制文本、删除文本、插入文本的功能。
(3)方便的查找指定文字、替换文字的功能。
(4)打印功能。
(5)简单的排版功能,如设置字体、字号等。
另外,还要求MyTxt实现一个称为“经典视图ClassicView”的功能,用以使用经典仿Terminal
形式的界面。
2、MyTxt基本设计思路和类划分
基于第1节中提出对于MyTxt功能需求的分析,对这个应用程序设计划分类如下:
(1)MyTxt:
这个类作为主类,实现主要功能,并实现图形用户界面。
(2)MenuColor:
这个类用来实现文字颜色的编辑功能。
(3)MenuFont:
这个类用来实现文字字体、字号的编辑功能。
(4)PrintableTextArea:
这个类将实现TextArea的功能,并使得文字可以打印输出。
3、MyTxt的具体实现
3.1、MyTxt类的设计
MyTxt类实现整体功能,包括窗体的初始化、各种用户事件监听和响应(编辑、保存、打
开等等)。
1.父类和主要接口
设计MyTxt整个窗体特性继承自JFrame类。
为了对用户命令做出响应(如保存文件),MyTxt类必须能够监听到用户的命令,因此设计
MyTxt类实现ActionListener接口。
为了对用户的键盘操作(即编辑输入事件)做出响应,MyTxt类必须能够监听到键盘敲击
事件,因此设计MyTxt类实现KeyListener接口。
MyTxt还将实现一个状态显示栏。
此外为了提供一个可以撤消的操作,为MyTxt添加一个类本身实现接口。
2.主要方法
下面以表格的形式列出MyTxt类至少应该具有的方法和各自的功能描述(如表1所示)。
表1MyTxt类的主要方法
方法功能描述
staticvoidmain(Stringargs[])MyTxt应用程序的入口
重载ActionListener接口中的方法,用于对用户
命令进行响应,用户命令包括“保存”、“打开”、
“关闭”、“打印”
voidkeyTyped(KeyEvente)重载KeyListener接口中的方法,用于对用户键
盘按下操作进行响应,写入相应的字符到编辑器
3.基本效果
图1为MyTxt的基本效果图。
图1MyTxt的基本效果图
4.代码分析
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.event.*;
importjava.io.*;
importjava.awt.font.*;
importjavax.swing.undo.UndoManager;
publicclassMyTxt
{
publicstaticvoidmain(String[]args)
{
Aframeframe=newAframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
classAframeextendsJFrame
{
publicAframe()
{
setTitle("记事本");
setSize(WIDTH,HEIGHT);
ContainercontentPane=getContentPane();
JPaneltxtPanel=newJPanel();
JPanelcomboxPanel=newJPanel();
JPaneltextPanel=newJPanel();
txtArea=newJTextArea("",17,40);
JScrollPanescrollPane=newJScrollPane(txtArea);
txtPanel.add(scrollPane);
contentPane.add(comboxPanel,BorderLayout.NORTH);
contentPane.add(txtPanel);
contentPane.add(textPanel,BorderLayout.SOUTH);
//Caidanlan:
添加主菜单并设置快捷键
JMenuBarmenuBar=newJMenuBar();
setJMenuBar(menuBar);
fileMenu=newJMenu("文件(F)");
editMenu=newJMenu("编辑(E)");
typeMenu=newJMenu("格式(O)");
viewMenu=newJMenu("查看(V)");
helpMenu=newJMenu("帮助(H)");
aboutMenu=newJMenu("关于(A)");
fileMenu.setMnemonic('F');
editMenu.setMnemonic('E');
typeMenu.setMnemonic('O');
viewMenu.setMnemonic('V');
helpMenu.setMnemonic('H');
aboutMenu.setMnemonic('A');
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(typeMenu);
menuBar.add(viewMenu);
menuBar.add(aboutMenu);
menuBar.add(helpMenu);
//wenjian“文件”菜单的子菜单添加以及设置加速器,监听器
aa=fileMenu.add(newShowAction("新建"));
aa.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
ab=fileMenu.add(newShowAction("打开"));
ab.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
ac=fileMenu.add(newShowAction("保存"));
ac.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
ad=fileMenu.add(newShowAction("另存为"));
ad.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
fileMenu.addSeparator();
ae=fileMenu.add(newShowAction("页面设置"));
ae.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK));
af=fileMenu.add(newShowAction("打印"));
af.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
fileMenu.addSeparator();//分割线
ag=fileMenu.add(newShowAction("退出"));
ag.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
//bianji“编辑”菜单的子菜单添加以及设置加速器,监听器
ah=editMenu.add(newShowAction("撤消"));
editMenu.addSeparator();
ah.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));
ai=editMenu.add(newShowAction("剪切"));
ai.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
aj=editMenu.add(newShowAction("复制"));
aj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
an=editMenu.add(newShowAction("粘贴"));
an.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
ak=editMenu.add(newShowAction("删除"));
ak.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK));
editMenu.addSeparator();
al=editMenu.add(newShowAction("查找"));
al.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
am=editMenu.add(newShowAction("全选"));
am.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
//geshi“格式”菜单的子菜单添加以及设置加速器,监听器
zdhh=newJMenu("自动换行(L)");
zdhh.setMnemonic('L');
typeMenu.add(zdhh);
ButtonGroupgroup=newButtonGroup();
xz=newJRadioButtonMenuItem("选择");
xz.addActionListener(newShowAction("选择"));
xz.setSelected(true);
qxxz=newJRadioButtonMenuItem("取消");
qxxz.addActionListener(newShowAction("取消"));
qxxz.setSelected(true);
group.add(xz);group.add(qxxz);
zdhh.add(xz);zdhh.add(qxxz);
bj=typeMenu.add(newShowAction("背景颜色"));
bj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
zt=typeMenu.add(newShowAction("字体"));
zt.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
//字体弹出框中的“确定”按钮
que=newButton("确定");
que.addActionListener(newboxlistener());
//chakan“查看”菜单的子菜单添加以及设置加速器,监听器
ztl=viewMenu.add(newShowAction("状态栏"));
ztl.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
//guanyu“关于”菜单的子菜单添加以及设置加速器,监听器
zzxx=aboutMenu.add(newShowAction("作者信息"));
zzxx.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
bq=aboutMenu.add(newShowAction("版权"));
bq.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,InputEvent.CTRL_MASK));
sm=aboutMenu.add(newShowAction("声明"));
sm.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
//bangzhu“帮助”菜单的子菜单添加以及设置加速器,监听器
shm=helpMenu.add(newShowAction("说明"));
shm.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
//文本框底部工具栏的设置
toolbar2=newJToolBar();
textPanel.add(toolbar2);
text1=newJTextField("就绪",10);
text2=newJTextField("欢迎使用该记事本!
",10);
text3=newJTextField("",10);
text4=newJTextField("",10);
textPanel.setLayout(newGridLayout(1,4));
toolbar2.add(text1);
toolbar2.add(text2);
toolbar2.add(text3);
toolbar2.add(text4);
text1.setEditable(false);
text2.setEditable(false);
text3.setEditable(false);
text4.setEditable(false);
//组合框的设置
//字体
zitiLabel=newJLabel("字体");comboxPanel.add(zitiLabel);
Stringzit[]={"宋体","华文行楷","楷体","黑体","幼圆","华文琥珀"};
zitibox=newJComboBox(zit);
comboxPanel.add(zitibox);
//颜色
yanseLabel=newJLabel("颜色");comboxPanel.add(yanseLabel);
Stringyans[]={"黑色","蓝色","绿色","红色","黄色","蓝绿色","浅灰色","白色"};
yansebox=newJComboBox(yans);
comboxPanel.add(yansebox);
//大小
daxiaoLabel=newJLabel("大小");comboxPanel.add(daxiaoLabel);
Stringdax[]={"15","10","5","20","25","30","35","40","..."};
daxiaobox=newJComboBox(dax);
comboxPanel.add(daxiaobox);
zitibox.setEditable(true);
yansebox.setEditable(true);
daxiaobox.setEditable(true);
comboxPanel.setLayout(newFlowLayout(FlowLayout.LEFT));//靠左排列
//组合框注册监听器
yansebox.addActionListener(newboxlistener());
zitibox.addActionListener(newboxlistener());
daxiaobox.addActionListener(newboxlistener());
txtPanel.setLayout(newGridLayout(1,1));
//实例化“撤销”
um=newUndoManager();
txtArea.getDocument().addUndoableEditListener(um);
}
//菜单栏的接口实现
privateclassShowActionextendsAbstractAction
{
publicShowAction(Stringname){super(name);}
publicvoidactionPerformed(ActionEvente)
{
Objects=e.getSource();
//新建
if(s==aa)
{
if(txtArea.getText().equals(""))
{
txtArea.setText("");
}
else{
intn=JOptionPane.showConfirmDialog(Aframe.this,"无标题记事本已改变。
\n想要保存吗?
","记事本",JOptionPane.YES_NO_CANCEL_OPTION);
if(n==JOptionPane.NO_OPTION){
txtArea.setText("");
setTitle("无标题"+"——"+"记事本");
}
elseif(n==JOptionPane.YES_OPTION)
{
save.setVisible(true);
Stringname=save.getDirectory()+save.getFile();
try
{
FileOutputStreamout=newFileOutputStream(name);
out.write(txtArea.getText().getBytes());
out.close();
}
catch(IOExceptiona)
{
System.err.println("保存失败。
。
!
");
}
}
}
}
//打开
if(s==ab)
{
open.setVisible(true);
Stringname=open.getDirectory()+open.getFile();
Stringname2=open.getFile();
setTitle(name2);
try
{
FileInputStreamin=newFileInputStream(name);
byte[]ia=newbyte[in.available()];
in.read(ia);
txtArea.setText(newString(ia));
in.close();
}
catch(IOExceptiona)
{
System.err.println("获取文件失败!
");
}
}
//另存为
if(s==ad)
{
save.setVisible(true);
Stringname=save.getDirectory()+save.getFile();
try
{
FileOutputStreamout=newFileOutputStream(name);
out.write(txtArea.getText().getBytes());
out.close();
}
catch(IOExceptiona)
{
System.err.println("保存失败。
。
!
");
}
shifulingcun=1;
}
//保存
if(s==ac)
{
if(shifulingcun!
=1)
{save.setVisible(true);}
Stringname=save.getDirectory()+save.getFile();
try
{
FileOutputStreamout=newFileOutputStream(name);
out.write(txtArea.getText().getBytes());
out.close();
}
catch(IOExceptionb)
{
System.err.println("保存文件失败");
}
}
//退出
if(s==ag)
{
intselection=JOptionPane.showConfirmDialog(
Aframe.this,
"确定退出么?
","退出?
",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE);
if(selection==JOptionPane.OK_OPTION)
{
System.exit(0);
}
}
//选择自动换行
if(s==xz)
{
txtArea.setLineWrap(true);
}
//取消自动换行
if(s==qxxz)
{
txtArea.setLineWrap(false);
}
//背景颜色
if(s==bj)
{
Colorcolor=JColorChooser.showDialog(Aframe.this,"调色板",txtArea.getBackground());
if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计 报告