JAVA大作业报告.docx
- 文档编号:9496481
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:20
- 大小:22.25KB
JAVA大作业报告.docx
《JAVA大作业报告.docx》由会员分享,可在线阅读,更多相关《JAVA大作业报告.docx(20页珍藏版)》请在冰豆网上搜索。
JAVA大作业报告
JAVA大作业报告
课题代号(单选)□课题1
课题2□课题3
课题名称:
通用源代码编辑器
小组成员人数(单选)□1人□2人
3人□4人
小组成员名单(学号和姓名):
(1)学号B0904姓名
(2)学号_______姓名
(3)学号姓名
课题实现采用的工具(如为其他,请填写具体工具名称)
□NetBeans
Eclipse□JDK命令行□其他______________
课题实现采用的操作系统(如为其他,请填写操作系统名称)
MicroSoft
Windows□Unix□Linux□其他______________
课题完成时间:
___________________2011.6.21________________
对应提交的电子文档打包文件名称(准确填写):
________________B09040119_B09040121_B09040220.zip
===================以下部分为教师填写区,请勿填写==================
评阅编号:
()-()
成绩评定:
软件运行______软件基本功能_______软件提高功能______软件部分成绩________文档结构______文档理论___________文档撰写__________文档部分成绩________总成绩____________
备注____________________________________________________________________
一、需求分析
课题要求:
基本要求:
设计用于软件开发时编写源代码的编辑器,可以完成文本方式的源程序的文件打开,编辑和文件保存操作。
提高要求:
实现对包括Java语言在内的编程语言集合(如Java,C,C++,ASM等)的关键词语法加亮功能;实现剪贴板的功能;实现搜索定位关键字段的功能;实现搜索替换关键字段的功能;实现二进制文件的打开以及编辑功能(一般用16进制方式进行)。
由课题要求知,演示程序为计算机和用户的对话形式执行,即在计算机的终端显示图形界面的源代码编辑器,然后用户可以实现编辑,保存,关键字加亮等功能。
二、概要设计
程序主要是使用Java的图形界面编程方法设计出一个界面出来。
设计出的界面应该包括一个菜单栏,菜单栏中包含各个菜单项目实现对文档的设置、打开和保存功能。
对于字符串的查找和替换功能的实现可以在程序中设计出一个对话框,由用户输入需要查找和替换的内容,程序根据用户输入的内容来实现程序要求的功能。
在界面中应该有一个用于输入文本的组件,在Java图形用户界面编程中可以选择用JTextArea,可以完成文本方式的源程序的文件打开,编辑和文件保存操作。
但要求实现对包括Java语言在内的编程语言集合(如Java,C,C++,ASM等)的关键词语法加亮功能,使用它却不能实现这样的功能,所以在程序中选用了JTextPane,它可以对输入的字符实现不同颜色和字体式样。
三、详细设计
设计一个CodeEditor类,继承自JFrame类,并在CodeEditor类利用JtextPane创建面板窗口textPane,利用Jlabel创建状态栏statusBar,利用JFileChooser创建文件选择器filechooser,利用JMenuBar创建并实例化菜单栏,利用JToolBar创建工具栏,再通过一些具体方法实现各功能键的功能。
建立构造函数publicCodeEditor();通过该构造函数实现记事本程序的主要功能,运行时在主类中通过调用该构造函数来实现对记事本程序的基本操作。
1.窗口设计
在主接口中设计一个CodeEditor容器继承自JFrame,并在其中加入菜单栏、工具栏和一个文本域控件。
publicclassCodeEditorextendsJFrame
JTextPanetextPane=newJTextPane();//创建文本窗格,编辑窗口
JFileChooserfilechooser=newJFileChooser();//文件选择器
setJMenuBar(createJMenuBar(actions));//设置菜单栏
Containercontainer=getContentPane();//得到容器
container.add(createJToolBar(actions),BorderLayout.NORTH);//工具栏
container.add(textPane,BorderLayout.CENTER);//增加文本窗格
container.add(statusBar,BorderLayout.SOUTH);//增加状态栏
2.功能设计
(1)在下拉菜单中加入子菜单并进行监听,分别实现对文件的操作功能。
点击不同菜单项时,显示不同接口。
(2)加入工具栏的功能键,通过工具栏实现对文本的基本操作。
(3)对每个菜单项进行注册监听。
点击不同功能键时,实现不同的操作,显示不同的窗口。
各种具体功能实现的相关代码:
(1)文件打开:
classOpenActionextendsAbstractAction{//打开文件命令
publicOpenAction(){
super("打开");
}
publicvoidactionPerformed(ActionEvente){
inti=filechooser.showOpenDialog(CodeEditor.this);//显示打开文件对话框
if(i==JFileChooser.APPROVE_OPTION){//点击对话框中打开选项
Filef=filechooser.getSelectedFile();//得到选择的文件
try{
InputStreamis=newFileInputStream(f);//得到文件输入流is
filePath=f.getAbsolutePath();
textPane.setDocument(newDefaultStyledDocument());//清空文档
textPane.getDocument().addDocumentListener(newSyntaxHighlighter(textPane));
JTextPanet=newJTextPane();//读入文件到文本窗格
t.read(is,"d");
textPane.setText(t.getText());
}catch(Exceptionex){
ex.printStackTrace();//输出出错信息
}
}
}
}
(2)新建:
classNewActionextendsAbstractAction{//新建文件命令
publicNewAction(){
super("新建");
}
publicvoidactionPerformed(ActionEvente){
textPane.setDocument(newDefaultStyledDocument());//清空文档
textPane.getDocument().addDocumentListener(newSyntaxHighlighter(textPane));//getDocument():
获取与编辑器关联的模型;addDocumentListener注册给定的观察者以便开始接收文档发生更改的通知
}
}
(3)保存:
classSaveActionextendsAbstractAction{//保存命令
publicSaveAction(){
super("保存");
}
publicvoidactionPerformed(ActionEvente){
inti=filechooser.showSaveDialog(CodeEditor.this);//显示保存文件对话框
if(i==JFileChooser.APPROVE_OPTION){//点击对话框中保存按钮
Filef=filechooser.getSelectedFile();//得到选择的文件
try{
FileOutputStreamout=newFileOutputStream(f);//得到文件输出流
textPane.getDocument().addDocumentListener(newSyntaxHighlighter(textPane));//getDocument():
获取与编辑器关联的模型;addDocumentListener注册给定的观察者以便开始接收文档发生更改的通知
out.write(textPane.getText().getBytes());//写出文件
}catch(Exceptionex){
ex.printStackTrace();//输出出错信息
}
}
}
}
(4)查找:
classSearchActionextendsAbstractAction{//查找命令
publicSearchAction(){
super("查找");
}
classSearchextendsJFrameimplementsActionListener{
privatestaticfinallongserialVersionUID=1L;
JButtonjb1=null;
JTextFieldjt1=null;
publicSearch(){
jt1=newJTextField(10);
this.setLayout(newGridLayout(3,1));
JPaneljp1=newJPanel();
JLabeljl1=newJLabel("查找内容");
jp1.add(jl1);
jp1.add(jt1);
this.add(jp1);
JPaneljp3=newJPanel();
jb1=newJButton("查找");
jb1.addActionListener(this);
JButtonjb4=newJButton("取消");
jb4.addActionListener(this);
jp3.add(jb1);
jp3.add(jb4);
this.add(jp3);
this.setSize(350,250);
this.setLocation(400,400);//设置窗口位置
this.setVisible(true);//尽可能放后
this.setResizable(false);//窗口大小固定
}
publicvoidactionPerformed(ActionEvente){
JButtonjSearch=(JButton)(e.getSource());
if(jSearch==jb1){
Stringfind;
StringcurrentTextInTextArea;
intfindLength;
intfindIndex;
find=jt1.getText();
if(find==null)
JOptionPane.showMessageDialog(null,"查找失败!
");
else{
findLength=find.length();
currentTextInTextArea=textPane.getText();
findIndex=currentTextInTextArea.indexOf(find);
if(findIndex<0)
JOptionPane.showMessageDialog(null,"查找的内容不存在!
");
else{
System.out.println(+findIndex);
textPane.requestFocus();
textPane.select(findIndex,findIndex+findLength);
}
}
}
else{
this.dispose();
}
}
}
publicvoidactionPerformed(ActionEvente){
newSearch();
}
}
(5)替换:
classExchangeActionextendsAbstractAction{//替换命令
publicExchangeAction(){
super("替换");
}
classReplaceextendsJFrameimplementsActionListener{
JTextFieldjt1=null;
JTextFieldjt2=null;
intnext=0;
intstart=0;
publicReplace(){
jt1=newJTextField(10);
jt2=newJTextField(10);
next=0;//从什么位置找
start=0;
//找到的第一个字符的位置
this.setLayout(newGridLayout(3,1));
JPaneljp1=newJPanel();
JLabeljl1=newJLabel("查找内容");
jp1.add(jl1);
jp1.add(jt1);
this.add(jp1);
JPaneljp2=newJPanel();
JLabeljl2=newJLabel("替换为");
jp2.add(jl2);
jp2.add(jt2);
this.add(jp2);
JPaneljp3=newJPanel();
JButtonjb1=newJButton("查找下一个");
jb1.addActionListener(this);
JButtonjb3=newJButton("替换");
jb3.addActionListener(this);
JButtonjb4=newJButton("取消");
jb4.addActionListener(this);
jp3.add(jb1);
jp3.add(jb3);
jp3.add(jb4);
this.add(jp3);
this.setSize(350,250);
this.setLocation(400,400);//设置窗口位置
this.setVisible(true);//尽可能放后
this.setResizable(false);//窗口大小固定
}
publicvoidactionPerformed(ActionEvente){
//如何实现替换功能
Stringtext=textPane.getText();//获得文本框内容
Stringjtt1=jt1.getText();//获得查找内容
Stringjtt2=jt2.getText();//获得替换内容
intlength=jtt1.length();//获得查找内容长度
if
if(jtt1.equals("")){
JOptionPane.showMessageDialog(null,"请输入内容!
","",JOptionPane.ERROR_MESSAGE);
}else{
if(text.indexOf(jtt1,next)!
=-1){//返回指定字符在此字符串中第一次出现处的索引
start=text.indexOf(jtt1,next);
textPane.setSelectionStart(start);
textPane.setSelectionEnd(start+length);
next=start+length;
}else{
JOptionPane.showMessageDialog(null,"sorry!
wecann'tfindit!
","",JOptionPane.ERROR_MESSAGE);}}
}elseif
intn=0;
next=0;
while(next if(textPane.getText().indexOf(jtt1,next)! =-1){ //返回指定字符在此字符串中第一次出现处的索引 start=textPane.getText().indexOf(jtt1,next); textPane.setSelectionStart(start); textPane.setSelectionEnd(start+length); textPane.replaceSelection(jtt2);//,start,start+length); n=1; next=start+jtt2.length()-1; }else{ if(n==0){ JOptionPane.showMessageDialog (null,"verysorry! wecann'tfindit! ","",JOptionPane.ERROR_MESSAGE); } break; } } }elseif this.dispose(); } } } publicvoidactionPerformed(ActionEvente){ newReplace(); } } (6)退出 classExitActionextendsAbstractAction{//退出命令 publicExitAction(){ super("退出"); } publicvoidactionPerformed(ActionEvente){ System.exit(0);//退出程序 } } (7)剪切 classCutActionextendsAbstractAction{//剪切命令 publicCutAction(){ super("剪切"); } publicvoidactionPerformed(ActionEvente){ textPane.cut();//调用文本窗格的剪切命令 } } (8)拷贝 classCopyActionextendsAbstractAction{//拷贝命令 publicCopyAction(){ super("拷贝"); } publicvoidactionPerformed(ActionEvente){ textPane.copy();//调用文本窗格的拷贝命令 } } (9)粘贴 classPasteActionextendsAbstractAction{//粘贴命令 publicPasteAction(){ super("粘贴"); } publicvoidactionPerformed(ActionEvente){ textPane.paste();//调用文本窗格的粘贴命令 } } (10)关于 classAboutActionextendsAbstractAction{//关于选项命令 publicAboutAction(){ super("关于"); } publicvoidactionPerformed(ActionEvente){ JOptionPane.showMessageDialog(CodeEditor.this,"南邮计院计科显示软件信息 } } (11)关键字加亮功能 classSyntaxHighlighterimplementsDocumentListener{ privateSet privateStylekeywordStyle;//Style: 与文档中某个元素相关的属性集合 privateStylenormalStyle; publicSyntaxHighlighter(JTextPaneeditor){ //准备着色使用的样式 keywordStyle=((StyledDocument)editor.getDocument()).addStyle("Keyword_Style",null); normalStyle=((StyledDocument)editor.getDocument()).addStyle("Keyword_Style",null); StyleConstants.setForeground(keywordStyle,Color.RED); StyleConstants.setBold(keywordStyle,true); StyleConstants.setForeground(normalStyle,Color.BLACK); StyleConstants.setBold(normalStyle,true); //准备关键字 keywords=newHashSet keywords.add("public"); keywords.add("protected"); keywords.add("private"); keywords.add("int"); keywords.add("char"); keywords.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 作业 报告