面向对象程序设计—文本编辑器的设计与实现
简易文本编辑器的设计与实现
简单文本编辑器的设计与实现1. 需求说明用汇编语言设计一个文本编辑器,可以在出现的界面中输入任意文本内容,利用DEL键、BACKSPACE键、HOME键、END键、上下左右光标键对文本进行全屏幕编辑。
按F1键激活菜单File,下移光标,选择New、Open、Save、Exit子菜单项实现文件的新建、打开、保存和退出功能。
按F10激活帮助,按Esc键退出帮助。
2. 设计说明2.1简要分析这个文本编辑器的设计采用了多个模块,有窗口模块、按键模块、光标模块、功能键模块等,而功能键模块中又是调用了按键模块。
为实现文本编辑,通过调用不同的模块达到预期的目的。
2.2概要设计3. 详细的算法描述3.1窗口模块WIN MACRO OPR1,OPR2,OPR3,OPR4,OPR5,OPR6 ;建立窗口 MOV AH,06HMOV AL,OPR1MOV BH,OPR2MOV CH,OPR3MOV CL,OPR4MOV DH,OPR5MOV DL,OPR6INT 10HENDM3.2光标模块POS_CURSE MACRO OP1,OP2,OP3 ;置光标位置MOV AH,02HMOV BH,OP1MOV DH,OP2MOV DL,OP3INT 10HENDMPOS_GET MACRO ;读光标位置MOV AH,03HMOV BH,0INT 10HENDM3.3部分按键模块HOME: ;Home键的功能POS_GETMOV ROW,DHMOV LINE,0JMP FIRST_END: ;End键的功能POS_GETMOV ROW,DHMOV LINE,79JMP FIRSTBAK_SP: ;退格键的功能POS_GETMOV ROW,DHMOV LINE,DLCMP LINE,0JE STOPDEC LINE3.4变量定义DATA SEGMENT ;定义数据段MENU DB ' File Help $'MANU_1 DB ' New ',13,10,'$'MANU_2 DB ' Open ',13,10,'$'MANU_3 DB ' Save ',13,10,'$'MANU_5 DB ' Exit ','$'HANDLE DW ?MESSAGE1 DB ' Please input new file name:','$'MESSAGE2 DB ' Please input save file name:','$'MESSAGE3 DB ' Please input open file name:','$'MESSAGE4 DB ' Save Or Not? (Y/N): ','$'PATH DB 50 DUP(0),'$'BUFFER DB 2000 DUP(?)BAK DB 3850 DUP(0)LINE DB ?ROW DB ?CHAR DB ?HELP_MAS5 DB 'Press F1 to active File. $' ;帮助内容HELP_MAS6 DB 'You can use Downcursor key to choose the fuction. $' HELP_MAS7 DB 'Press F10 to show the help massage.Press Esc To Quit. $'HANGLIE DB '???//???','$' ;行//列DATA ENDS3.5主函数MAIN PROC FAR ;主程序ASSUME CS:CODE,DS:DATASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXCALL WIND CALL EDITRETMAIN ENDP4. 源程序和执行结果4.1源程序RED_CHR MACRO ;从键盘读字符MOV AH,00HINT 16HENDMSTRING MACRO P1 ;显示字符串MOV AH,09HLEA DX,P1INT 21HENDMWIN MACRO OPR1,OPR2,OPR3,OPR4,OPR5,OPR6 ;建立窗口 MOV AH,06HMOV AL,OPR1MOV BH,OPR2MOV CH,OPR3MOV CL,OPR4MOV DH,OPR5MOV DL,OPR6INT 10HENDMPOS_CURSE MACRO OP1,OP2,OP3 ;置光标位置MOV AH,02HMOV BH,OP1MOV DH,OP2MOV DL,OP3INT 10HENDMPOS_GET MACRO ;读光标位置MOV AH,03HMOV BH,0INT 10HENDMDATA SEGMENT ;定义数据段MENU DB ' File Help $'MANU_1 DB ' New ',13,10,'$'MANU_2 DB ' Open ',13,10,'$'MANU_3 DB ' Save ',13,10,'$'MANU_5 DB ' Exit ','$'HANDLE DW ?MESSAGE1 DB ' Please input new file name:','$'MESSAGE2 DB ' Please input save file name:','$'MESSAGE3 DB ' Please input open file name:','$'MESSAGE4 DB ' Save Or Not? (Y/N): ','$'PATH DB 50 DUP(0),'$'BUFFER DB 2000 DUP(?)BAK DB 3850 DUP(0)LINE DB ?ROW DB ?CHAR DB ?HELP_MAS5 DB 'Press F1 to active File. $' ;帮助内容HELP_MAS6 DB 'You can use Downcursor key to choose the fuction. $' HELP_MAS7 DB 'Press F10 to show the help massage.Press Esc To Quit. $'HANGLIE DB '???//???','$' ;行//列DATA ENDSCODE SEGMENTMAIN PROC FAR ;主程序ASSUME CS:CODE,DS:DATASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXCALL WIND CALL EDITRETMAIN ENDPWIND PROC NEAR ;创建窗口子程序WIN 0,3EH,1,0,24,79 ;定义窗口背景WIN 1,1FH,0,0,0,79WIN 0,1FH,24,0,24,79SHOW: ;显示菜单位置及内容POS_CURSE 0,0,1MOV AH,09HLEA DX,MENUINT 21HPOS_CURSE 0,1,0MOV ROW,DHMOV LINE,DLWIND ENDPEDIT PROC NEARCHAR_GET: ;读字符CALL COMCOM PROC NEAR ;定义功能鍵POS_GETMOV ROW,DHMOV LINE,DLFIRST:POS_CURSE 0,ROW,LINEJ00: MOV AH,0INT 16H ;从键盘读字符 ah=扫描码 al=字符码 PUSH AXLEA DX,BUFFERMOV BUFFER[BX],ALINC BXCMP AH,48H ;上JZ UP_1CMP AH,50H ;下JZ DOWN_1CMP AH,4BH ;左JZ LEFTCMP AH,4DH ;右JZ RIGHTCMP AH,1CH ;回车JZ ENTER_1CALL FUC_KEYMOV AH,2MOV DL,ALINT 21HPOP AXCALL MENU_SHOWJMP J6DOWN_1:JMP DOWNENTER_1:JMP ENTER_2UP_1: JMP UPLEFT: ;光标左移POS_GETMOV ROW,DHMOV DL,LINECMP LINE,0JNZ DIRECTMOV LINE,79DEC ROWCMP ROW,0JE STOP2JMP FIRSTSTOP2:MOV ROW,1JMP FIRSTDIRECT:DEC LINEJMP FIRSTRIGHT: ;光标右移 POS_GETMOV ROW,DHMOV DL,LINECMP LINE,79JNZ DIRECT2MOV LINE,0INC ROWCMP ROW,24JE RETURNS1JMP FIRSTDIRECT2:INC LINEJMP FIRSTENTER_2:JMP ENTERUP: ;上移光标POS_GETMOV ROW,DHMOV DL,LINEDEC ROWCMP ROW,0JE STOP1JMP FIRSTSTOP1:MOV ROW,1JMP FIRSTDOWN: ;下移光标 POS_GETMOV ROW,DHMOV DL,LINEINC ROWCMP ROW,24JE STOP3JMP FIRSTSTOP3:MOV ROW,23JMP FIRSTRETURNS1:JMP RETURNSENTER: ;回车换行POS_GETMOV ROW,DHMOV LINE,DLINC ROWCMP ROW,24JE RETURNSMOV LINE,0JMP FIRSTRETURNS:MOV ROW,24MOV LINE,0JMP FIRSTJ6:RETCOM ENDPFUC_KEY PROC NEAR ;功能键子程序 NEXT:CMP AH,47H ;Home键JZ HOMECMP AH,4FH ;End键JZ _ENDCMP AH,0EH ;Backspace键JZ BAK_SPCMP AH,53HJZ DELCMP AH,44H ;F10键JZ HELP_0RETHELP_0: CALL HELPHOME: ;Home键的功能 POS_GETMOV ROW,DHMOV LINE,0JMP FIRST_END: ;End键的功能POS_GETMOV ROW,DHMOV LINE,79JMP FIRSTBAK_SP: ;退格键的功能 POS_GETMOV ROW,DHMOV LINE,DLCMP LINE,0JE STOPDEC LINEJMP ABSTOP:MOV LINE,0AB:POS_GET 0,ROW,LINEMOV AH,2MOV DL,00INT 21HJMP FIRSTDEL: ;Del键POS_GETMOV ROW,DHMOV LINE,DLDEC LINEPOS_GET 0,ROW,LINEMOV AH,2MOV DL,00INT 21HINC LINEJMP FIRSTCM:CMP LINE,00JZ POS_CMPOS_CM:POS_CURSE 0,0,0JMP FIRSTHELP PROC NEAR ;显示帮助信息CALL SAVEDISPLAY ;显示帮助信息每行的位置 POS_GETPUSH DXWIN 0,57H,4,5,21,70POS_CURSE 0,6,25STRING HELP_MAS5POS_CURSE 0,8,11STRING HELP_MAS6POS_CURSE 0,10,11STRING HELP_MAS7POP DXPOS_CURSE 0,DH,DLMOV AH,0INT 16HCMP AH,36H ;F10 active helpJNZ CLSCALL HELPCLS:WIN 0,1EH,9,10,13,70 ;清屏CALL BACKDISPLAYHELP ENDPFUC_KEY ENDPMENU_SHOW PROC NEAR ;显示菜单CALL SAVEDISPLAYPUSH CXCMP AH,3BH ;F1功能JZ MENU_SHJMP CHAR_GETMENU_SH: ;定义菜单的背景字体颜色 POS_GETPUSH DXWIN 0,06H,2,1,7,11WIN 0,65H,1,0,6,10POS_CURSE 0,1,0STRING MANU_1STRING MANU_2STRING MANU_3STRING MANU_5POP DXDEC DLPOS_CURSE 0,DH,DLCOPMAR:RED_CHRCMP AH,50HJZ MANU_NJMP MANU_HIDMANU_HID: ;菜单隐藏WIN 0,1EH,1,1,7,11CALL BACKDISPLAYJMP CHAR_GETMANU_N: ;开始定义各个菜单项WIN 0,65H,5,1,5,8POS_CURSE 0,5,0STRING MANU_5WIN 0,15H,1,1,1,8POS_CURSE 0,1,0STRING MANU_1RED_CHRCMP AH,48HJE MANU_NCMP AL,0DHJZ NEW_1CMP AH,50HJE MANU_OJMP MANU_HID MANU_N0:JMP MANU_NMANU_O:WIN 0,65H,1,1,1,8 POS_CURSE 0,1,0 STRING MANU_1 WIN 0,15H,2,1,2,8 POS_CURSE 0,2,0 STRING MANU_2 RED_CHRCMP AH,48HJE MANU_OCMP AL,0DHJZ OPEN_1CMP AH,50HJE MANU_SJMP MANU_HID NEW_1: JMP NEW_2 MANU_S:WIN 0,65H,2,1,2,8 POS_CURSE 0,2,0 STRING MANU_2 WIN 0,15H,3,1,3,8 POS_CURSE 0,3,0 STRING MANU_3 RED_CHRCMP AL,0DHJZ SAVE_1CMP AH,48HJE MANU_SCMP AH,50HJE MANU_AJMP MANU_HID OPEN_1: JMP OPEN_2MANU_N1:JMP MANU_NMANU_A:WIN 0,65H,3,1,3,8POS_CURSE 0,3,0STRING MANU_3RED_CHRCMP AH,48HJE MANU_ACMP AH,50HJE MANU_EJMP MANU_HIDMANU_N2:JMP MANU_N1NEW_2: JMP NEWSAVE_1: CALL SAVEMANU_E:WIN 0,15H,5,1,5,8POS_CURSE 0,5,0STRING MANU_5RED_CHRCMP AH,50HJE MANU_N2CMP AH,1CHJE EXITJMP MANU_HIDEXIT:CALL BACKDISPLAY WIN 0,07H,15,10,17,61 WIN 0,24H,14,9,16,60 MOV DH,15MOV DL,9MOV BH,0MOV AH,2INT 10HLEA DX,MESSAGE4 MOV AH,9MOV AH,1INT 21HCMP AL,79HJNZ QCALL QUITTQ: CMP AL,6EHJZ QUITQUIT: WIN 0,07H,0,0,24,79POS_CURSE 0,0,0MOV AH,4CHINT 21HRETMENU_SHOW ENDPNEW PROC NEAR ;新建文件 POS_GETPUSH DXCALL BACKDISPLAYWIN 0,07H,15,10,17,61WIN 0,24H,14,9,16,60,MOV DH,15MOV DL,9MOV BH,0MOV AH,02HINT 10HLEA DX,MESSAGE1CMP AL,0DHMOV AH,9INT 21HMOV BX,0ALL:MOV AH,01HINT 21HCMP AL,0DHJE ALLLMOV PATH[BX],ALJMP ALLALLL:WIN 0,3EH,15,9,17,61POP DXPOS_CURSE 0,DH,DLLEA DX,PATHMOV AH,3CHMOV CX,0INT 21HMOV HANDLE,AXMOV BX,AXMOV AH,3EHINT 21HWIN 0,3EH,1,0,23,79MOV DH,1MOV DL,0MOV BH,0MOV AH,2INT 10HJMP CHAR_GETNEW ENDPOPEN_2: JMP OPENOPEN PROC NEAR ;打开文件 CALL BACKDISPLAYWIN 0,07H,15,10,17,61WIN 0,24H,14,9,16,60MOV DH,15MOV DL,9MOV BH,0MOV AH,2INT 10HLEA DX,MESSAGE3MOV AH,9INT 21HMOV BX,0CLL:MOV AH,1INT 21HCMP AL,13JE CLLLMOV PATH[BX],AL INC BXJMP CLLCLLL:WIN 0,3EH,1,0,23,79 LEA DX,PATHMOV AH,3DHMOV AL,0INT 21HMOV HANDLE,AXLEA DX,BUFFERMOV BX,HANDLEMOV CX,2000MOV AH,3FHINT 21HWIN 0,3EH,1,23,1,79 MOV DH,1MOV DL,0MOV BH,0MOV AH,2INT 10HMOV CX,1000SUB BX,BXREPLAY:MOV DL,BUFFER[BX] INC BXMOV AH,2INT 21HLOOP REPLAYMOV BX,HANDLEMOV AH,3EHINT 21HMOV DH,1MOV DL,0MOV BH,0MOV AH,2INT 10HMOV CX,10MOV BX,0CLEAPATH_3:MOV BL,0MOV PATH[BX],BLLOOP CLEAPATH_3JMP CHAR_GETOPEN ENDPSAVE PROC NEAR ;保存文件 POS_GETPUSH DXWIN 0,3EH,1,0,6,10CALL BACKDISPLAYMOV AH,PATHCMP AH,21HJL J_3JMP J_4J_3:WIN 0,07H,15,10,17,61WIN 0,24H,14,9,16,60,MOV DH,15MOV DL,9MOV BH,0MOV AH,2INT 10HLEA DX,MESSAGE2MOV AH,9INT 21HMOV BX,0DLL:MOV AH,1INT 21HCMP AL,0DHJE DLLLMOV PATH[BX],ALINC BXJMP DLLDLLL:WIN 0,3EH,1,0,23,79POP DXPOS_CURSE 0,DH,DL J_4: LEA DX,PATHMOV AH,3CHMOV CX,0INT 21HMOV HANDLE,AXLEA DX,BUFFERMOV BX,HANDLEMOV CX,2000MOV AH,40HINT 21HMOV BX,HANDLEMOV AH,3EHINT 21HCALL BACKDISPLAY JMP CHAR_GETSAVE ENDP SAVEDISPLAY PROC NEAR PUSH AXPUSH BXPUSH CXPUSH DXPUSH DSMOV AX,0002HINT 33HMOV BX,0DMOV CX,3840DLOOP1:MOV AX,0B800HMOV DS,AXMOV DL,DS:[BX]MOV AX,DATAMOV DS,AXMOV BAK[BX],DLINC BXLOOP LOOP1MOV AX,0001HINT 33HPOP DSPOP DXPOP CXPOP BXPOP AXSAVEDISPLAY ENDPBACKDISPLAY PROC NEAR PUSH AXPUSH BXPUSH CXPUSH DXPUSH DSMOV BX,0DMOV CX,3840DLOOP11:MOV AX,DATAMOV DS,AXMOV DL,BAK[BX]MOV AX,0B800HMOV DS,AXMOV DS:[BX],DLINC BXLOOP LOOP11POP DSPOP DXPOP CXPOP BXPOP AXRETBACKDISPLAY ENDPQUITT PROC NEAR ;退出 CALL BACKDISPLAYWIN 0,07H,15,10,17,61WIN 0,24H,14,9,16,60,MOV DH,15MOV DL,9MOV BH,0MOV AH,2INT 10HLEA DX,MESSAGE2MOV AH,9INT 21HMOV BX,0QLL:MOV AH,1INT 21HCMP AL,0DHJE QLLLMOV PATH[BX],ALINC BXJMP QLLQLLL:WIN 0,07H,15,10,17,61WIN 0,3EH,14,9,16,60CALL BACKDISPLAYLEA DX,PATHMOV AH,3CHMOV CX,00INT 21HMOV HANDLE,AXLEA DX,BUFFERMOV BX,HANDLEMOV CX,2000MOV AH,40HINT 21HMOV BX,HANDLEMOV AH,3EHINT 21HCALL BACKDISPLAYWIN 0,07H,0,0,24,79MOV AH,4CHINT 21HRETQUITT ENDPEDIT ENDPCODE ENDSEND START ;结束4.2执行结果4.2.1测试方法在弹出的界面中第一行输入ABCDEFGHIJKLMN,在第二行输入abcdefghijklmn。
项目一:文本编辑器的设计与实现
课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注项目一:文本编辑器的设计与实现【项目背景】文本编辑器有两类:单文档和多文档文本编辑器。
单文档文本编辑器一次只能打开一个文件,如果要打开另一个文件,必须关闭当前打开的文件,微软的写字板程序就是单文档字处理程序。
多文档文本编辑器允许同时打开多个文件,每个文件占用一个子窗口,微软的Word程序就是多文档字处理程序。
本项目主要介绍建立单文档文本编辑器的方法,通过分析现有文本编辑器的功能与操作过程,利用C#开发一个新的文本编辑器。
【主要内容与技能要求】(1)会进行复杂窗口设计(2)会对常见的文本编辑功能进行分析与编码实现(3)会设计多文档窗口一、预备知识本项目主要利用RichTextBox控件来构成文本编辑区域。
1、RichT extBox控件的主要属性属性SelectedText、SelectionLength、SelectionStart:属性SelectionFont:属性SelectionColor:属性Lines:属性Modified:事件SelectionChange:事件TextChanged:2、RichT extBox控件的主要方法方法Clear():方法Copy()、Cut()、Paste():方法SelectAll():方法Find():方法SaveFile()和LoadFile():课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注方法Undo():方法Redo():二、功能设计与实现1、剪贴板功能放RichTextBox控件到窗体。
属性Name=richTextBox1,Dock=Fill,Text=""。
private void menuItemEditCut_Click(object sender,EventArgs e){ richTextBox1.Cut(); } //剪切private void menuItemEditCopy_Click(object sender,EventArgs e){ richTextBox1.Copy(); } //拷贝private void menuItemEditPaste_Click(object sender,EventArgs e){ richTextBox1.Paste(); } //粘贴private void menuItemEditUndo_Click(object sender,EventArgs e){ richTextBox1.Undo(); } //撤销private void menuItemEditRedo_Click(object sender,EventArgs e){ richTextBox1.Redo(); } //恢复2、存取文件功能文本编辑器都应具有文件存取功能,菜单顶级菜单项“文件”的弹出菜单中一般包括如下菜单项:新建、打开、关闭、保存和另存为等。
面向对象课程设计报告-文本编辑器
《面向对象程序设计》课程设计报告题目:java文本编辑器院(系):专业班级:学生姓名:学号:指导教师:20 14 年 12 月 29 日至20 15 年 1 月 9 日面向对象程序设计课程设计任务书目录1需求与总体设计 (4)1.1总体功能图 (4)1.2 总体设计思路 (4)(1)文件菜单 (4)(2)编辑菜单 (4)(3)右键菜单 (4)1.3 总体模块图 (5)1.4简要类图 (5)2详细设计 (6)2.1各类的功能及关键代码设计和类图表示 (6)(1)首先创建一个公共的类名为Bjq (6)(2)创建一个空的菜单条并添加两个菜单项(文件、编辑) (7)(3)先设计一个匿名内部类,为文件、编辑菜单添加其它下拉子菜单 (7)(4)右键快捷菜单的字体子菜单的创建 (8)(5)为鼠标创建监听器。
用于用鼠标点击右键时出现快捷菜单:复制、粘贴、字体大小、字体颜色。
(9)(6)为窗体添加监听器 (9)(7)设计main方法:为整个程序的开始提供了入口 (9)2.2程序流程图 (10)2.3 详细类图 (12)3编码实现 (12)3.1程序实现代码 (12)4系统测试 (19)4.1错误处理 (19)4.2主要的测试截图 (19)1. 程序运行界面 (19)2. 编辑菜单及其复制粘贴功能 (20)3. 右键菜单及其功能效果 (21)4. 文件菜单及其功能界面 (23)总结 (26)1需求与总体设计1.1总体功能图图1.01.2 总体设计思路在本程序中,设计了一个菜单栏和文本内容区。
要想记事本完成需求分析中相应的功能,还必须添加事件监听器。
事件监听器不仅要添加在菜单栏和内容输入区,还需加在容器中。
本程序中Act Listener实现了Action Listener接口,用来监听并处理所有菜单项和内容输入区为事件源的事件。
另外,还用来Window Listener来监听处理容器关闭触发的事件,Window Listener继承了Windows Adapter类并覆盖了Windows Closing方法。
程序设计课程设计---类似于“记事本”的文本编辑器
课程设计报告
if(m_font.m_hObject)
m_font.DeleteObject();
m_font.CreateFontIndirect(&lf);
Invalidate();
UpdateWindow();
}
}
void CNoteView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
CHOOSEFONT
一个是VC类库给出的设置颜色的结构体,另一个是VC类库给出的设置字体的结构体
全局变量
CNotepadApp theApp
用theApp这个全局变量来获取当前应用程序实例的句柄hInstance
文件
头文件:ChildFrm.h
MainFrm.h
notepad.h
notepadDoc.h
{
// TODO: Add your message handler code here and/or call default
SetCaretPos(point);
m_strLine.Empty();
m_ptOrigin=point;
CView::OnLButtonDown(nFlags, point);
我用的是C++这个高级程序语言开发工具,通过这次的课程设计,增加了对MFC编程环境的认识,也加深了对c++语言的认识了解,基本能明白windows框架程序内部生成的一个过程以及其内部调用的机制,一定程度上也深一步地认意识到面向对象的思想。
文本编辑器的程序设计及代码示例
文本编辑器的程序设计及代码示例在计算机科学领域,文本编辑器是一种用于编辑文本文件的应用程序。
它允许用户创建、修改和保存文本文件,并提供了一系列功能来方便用户进行编辑操作。
本文将介绍文本编辑器的程序设计原理,以及示范几个常见的代码示例。
一、程序设计原理文本编辑器的程序设计需要考虑以下几个方面:1. 用户界面设计:一个好的文本编辑器应具备直观友好的用户界面,提供各种操作选项和快捷键,使用户能够轻松地进行文本编辑。
2. 文本处理功能:文本编辑器应具备基本的文本处理功能,如插入和删除文本、查找和替换、拷贝和粘贴等。
这些功能需要通过合适的数据结构和算法来实现。
3. 文本格式化:文本编辑器应支持对文本进行格式化操作,如自动对齐、缩进、换行等。
4. 多标签支持:多标签功能允许用户同时打开多个文本文件,并在它们之间切换。
这要求程序设计中能够有效地管理多个文本文件的打开、关闭和切换。
二、代码示例下面是几个简单的代码示例,用于展示文本编辑器的一些基本功能。
1. 创建文本文件```pythondef create_file(filename):# 创建一个新的文本文件file = open(filename, "w")file.close()```2. 打开文本文件```pythondef open_file(filename):# 打开文本文件并返回文件对象 file = open(filename, "r")return file```3. 插入文本```pythondef insert_text(file, position, text): # 在指定位置插入文本file.seek(position)content = file.read()file.seek(position)file.write(text + content)```4. 删除文本```pythondef delete_text(file, start, end):# 删除指定位置的文本file.seek(start)content = file.read()file.seek(start)file.write(content[:end - start])```5. 查找和替换文本```pythondef find_replace(file, old_text, new_text):# 在文本中查找指定内容并替换file.seek(0)content = file.read()new_content = content.replace(old_text, new_text)file.seek(0)file.write(new_content)```6. 关闭文本文件```pythondef close_file(file):# 关闭文本文件file.close()```三、总结通过以上代码示例,我们展示了文本编辑器的一些基本功能,包括创建文件、打开文件、插入和删除文本、查找和替换文本以及关闭文件。
面向对象编程语言设计与实现
面向对象编程语言设计与实现一、前言面向对象编程语言是编程语言中的一种重要范式,也是目前广泛使用的编程方式之一。
本文将详细介绍面向对象编程语言的设计与实现,并探讨面向对象编程语言的特点及其优缺点。
二、面向对象编程语言设计面向对象编程语言的设计方式之一是“面向对象设计”,其特点是以现实世界中的实体为出发点,将其抽象为类,再通过类之间的关系建立对象,并对这些对象进行操作。
同时,面向对象编程语言还具有以下特点。
2.1 封装性面向对象编程语言允许将数据和对数据的操作封装起来,使用者无需关心其内在实现,只需要调用接口即可使用这些数据和操作。
这样做可以有效提高代码的可读性和可维护性,并且可以将类归类为相应的组件,易于重用和组合。
2.2 多态性多态性意味着同一操作可以作用于不同的对象,在不同的对象上可以产生不同的结果,这样可以避免对相同功能的重复编写。
在面向对象编程语言中,多态性主要通过继承和接口实现,可以充分利用代码的可扩展性和重用性。
2.3 继承性继承是一种面向对象编程语言中常用的代码重用方式。
通过继承可以将类中的一部分或全部内容复制到子类中,从而达到代码重用和代码扩展的目的。
同时继承还可以增强程序的可读性和可维护性。
2.4 抽象性抽象性可以将对象的公共特征提取出来,并通过类的形式表示出来。
它是实现封装和继承的前提和基础。
通过抽象性,我们可以将问题的本质部分抽象出来,使得代码具有更好的可重用性和可扩展性。
三、面向对象编程语言实现面向对象编程语言实现的核心是虚拟机。
虚拟机可以将源代码翻译成计算机可以执行的机器码或者字节码,同时还负责执行所生成的代码,并提供必要的运行环境支持。
3.1 解释型虚拟机解释型虚拟机通过将源代码直接翻译成计算机可以执行的机器码,然后一条一条地执行。
解释型虚拟机的优点是可以实现动态性,同时也可以将优化程序的成本分配给运行时。
其缺点是效率较低,无法达到编译程序的速度。
3.2 编译型虚拟机编译型虚拟机通过将源代码翻译成字节码,然后再将字节码编译成机器码,以加快运行速度。
java实训报告文本编辑器的设计与实现
《Java实训》设计报告
文本编辑器的设计与实现
专业: 班级: 09-23 学号: 姓名:
软件技术
090123036 薛岳
石家庄科技信息职业学院 信息工程系
2011年10月15日
项目名称 项目简介
项目目的
replace();// 执行替换函数 } if (e.getActionCommand() == "帮助") {//帮助消息窗体
JOptionPane.showMessageDialog(this,"记事本程序!", "帮助", JOptionPane.PLAIN_MESSAGE);
} } } (1)成员变量 menustr是String型数组,是菜单栏的各个字符串。 menuitem1是JMenuItem数组,将为数组中的每个菜单项添加注册有ActionEvent事件监听器 (2)方法 main(String args[])方法是文本编辑器程序运行的入口方法。 addmyMenu() 菜单函数,生成菜单。 (3)效果图 窗口效果如图2所示。
6/8
java实训报告文本编辑器的设计与实现 西安心海建站()
三、项目总结 实训的时间很短,只有短短一周的时间,但是需要完成的工作很多,一个学期的java学习我们所 学的并不是很多,本次实训我选取的是文本编辑器的设计。虽然以前在c#中做过实训,但是c#是 在图形用户界面中进行窗体的设计,是对窗体和Windows控件的操作,而在java中需要用代码来 实现窗体的实例化和调用。是要通过代码来实例化和创建窗体,并通过代码来调用,引入了java 中的多个类来实现各个窗体和控件,并发现了自己的不足之处。 在窗体中需要加入文本编辑区来存储文本,这就需要创建文本对象并对其进行实例化,并且在编 辑菜单中还需要多个方法来实现对文本的操作和处理,比如剪切和复制,用到本身的函数来操作 。对于所有的菜单和菜单项以及控件所做才操作处理都需要注册其相应的监听事件来完成,而在 文件菜单中,打开的操作用到了文件的输入流,保存则用到了文本的输出流。而在打开事件中所 以遇到的错误在查阅了很多资料后在得以解决,并在此过程中学到了很多老师在课程中没有讲到 的知识,是自己受益匪浅,在文件菜单中的保存中,需要用if语句进行相应的判断,来执行不同 的代码实现,并与相应的异常处理语句相结合来完善程序,是代码哥哥具有健壮性和灵活性,减 少程序运行时错误出现。 在查找和替换中,对于查找函数则需要判断许多不同的情况来进行不同,尤其是要如何实现查找 和替换的功能是最关键的,需要使用什么样的方法来达到这一目的是最困难的,通过网络和同学 的讨论发现很多同学也遇到了这个问题,而采用现成的代码是行不通的,必须自己在实现中进行 一次次的修改,不断调整代码的运行方式来实现其功能。 四、心得体会 由于时间仓促,还有许多其他的功能没有,并在已实现的功能中也有不足的地方,还需要进一步 对其进行修改。再次过程中不断加深对java程序设计的认识和理解,丰富自己的知识,了解自己 的不足,加强自己的理解能力和学习能力,提高自己独立解决问题的能力。Java是一门全新的计 算机语言,需要自己对其全新的理解,而java的很多功能都需要在学习中去发现和理解,应用到 不同的设计中去,并结合网络这个以有利工具方便自己学习java的语言和强大的编码能力,以及 在以后的设计中把程序不断完善。
面向对象编程语言的设计与实现
面向对象编程语言的设计与实现随着计算机技术的发展,编程语言也在不断发展。
其中面向对象编程语言是其中的重要分支之一,它已经成为了现代计算机编程中不可或缺的一部分。
面向对象编程语言最早来源于Smalltalk编程语言,现在主流的面向对象编程语言有Java、C++、Python 等。
本文将从面向对象编程语言的设计和实现方面来探讨面向对象编程语言的基本特征和设计原则。
一、面向对象编程语言的基本特征1. 抽象面向对象编程语言最基本的特征之一就是抽象。
抽象是将事物中的一些共性部分提取出来,形成抽象概念,例如“车”,“动物”等都是抽象的概念。
在面向对象编程语言中,我们可以通过定义抽象类或接口来描述程序中的抽象概念,从而抽象出问题的本质,更加清晰地呈现出程序的结构和功能。
2. 封装面向对象编程语言中的另一个重要特征就是封装。
封装是指将数据和方法作为一个整体,防止直接访问独立的组件。
通过封装,我们可以防止外部对象直接访问内部实现,从而保护程序的稳定性和安全性。
3. 继承继承是面向对象编程语言的另一个基本特征。
继承是指通过子类继承父类的特征、方法或属性,从而扩展父类的功能。
继承可以大大节省我们的代码量,同时也方便代码的维护和扩展。
4. 多态多态是面向对象编程语言的一个重要特征。
多态的定义是同一对象在不同的情况下可以有不同的表现形式和功能。
多态通过多种方式实现,例如方法重载、方法重写等。
多态可以使我们的程序更加灵活,减少代码量,同时也提高了程序的健壮性和扩展性。
二、面向对象编程语言的设计原则1. 单一职责原则单一职责原则是指每个类应该只有一个单一的功能,即一个类只负责一项职责,确保类在实现过程中与其他类解耦。
采用单一职责原则可以使得程序更加稳定和可控。
2. 开放封闭原则开放封闭原则是指软件实体应该对扩展开放,对修改关闭,即在不修改源代码的情况下,应该可以对原有代码进行扩展。
采用开放封闭原则可以降低代码维护成本,提高代码的扩展性。
面向对象编程语言的设计与实现
面向对象编程语言的设计与实现面向对象编程(Object-oriented programming,简称OOP)是一种以对象为基本单位的编程范式,它通过封装、继承和多态等机制,使得软件开发变得更加模块化、灵活和可扩展。
面向对象编程语言的设计与实现是为了支持这种编程范式而建立的程序设计语言。
在设计面向对象编程语言时,需要考虑以下几个关键要素:类、对象、封装、继承、多态和消息传递。
首先,类是面向对象编程中最基本的概念之一。
类描述了一组具有相同特征和行为的对象。
在设计面向对象编程语言时,需要考虑如何定义和实现类以及如何支持类的继承和多态。
其次,对象是类的实例。
每个对象都有自己的状态和行为。
在设计面向对象编程语言时,需要考虑如何创建和管理对象,以及如何支持对象之间的交互和通信。
封装是指将数据和操作封装在类内部,使得外部无法直接访问和修改。
封装可以提高代码的可维护性和安全性。
在设计面向对象编程语言时,需要考虑如何提供封装机制,并确保数据的私有性和方法的访问控制。
继承是通过扩展已有类,创建新的类的过程。
继承可以提高代码的重用性和可扩展性。
在设计面向对象编程语言时,需要考虑如何支持继承,并解决继承带来的问题,如方法重写、父类引用的子类实例等。
多态是指同一个操作可以作用于不同类型的对象,并根据对象的实际类型进行不同的操作。
多态可以提高代码的灵活性和可读性。
在设计面向对象编程语言时,需要考虑如何支持多态,并提供动态绑定和虚函数机制。
消息传递是面向对象编程中对象之间交互的基本方式。
对象通过发送消息来请求执行某个操作或获取某个信息。
在设计面向对象编程语言时,需要考虑如何支持消息传递,并提供消息的处理机制。
在实现面向对象编程语言时,需要考虑不同的编程范式和编译器技术。
面向对象编程语言可以基于解释器或编译器来实现。
解释器可以直接执行源代码,而编译器将源代码转换为机器码或字节码,然后再执行。
面向对象编程语言的设计和实现还需要考虑语言本身的语法和语义。
Java课程设计—文本编辑器的设计与实现
面向对象课程设计报告第 1 页,共11 页主要代码:Write note;{// 新建选项File_bar_creat = this.AddItem("新建(N) Ctrl+N", File_bar);File_bar_creat.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0){// 设置新文件内容text.setText("");}});//打开选项File_bar_open = this.AddItem("打开(O) Ctrl+O", File_bar);File_bar_open.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){try{jfc.setCurrentDirectory(new File("."));// 设置当前目录jfc.setFileFilter(new filter()); // 过滤文件jfc.setAcceptAllFileFilterUsed(false); // 全选文件jfc.showOpenDialog(null); // 弹出一个 "Open File" 文件选择器对话框。
file = jfc.getSelectedFile(); // 获取已经选择目录jsb = file.getName(); // 获取目录名setTitle(jsb); // 显示目录名int length = (int) (jfc.getSelectedFile()).length();1.程序运行主界面如图1示:图12.各个菜单基本构成如下图2、图3、图4、图5和图6所示:图2图3图4图63.依次选择文件目录下新建、打开、保存、另存为和退出按钮,运行结果如图7、图8、图9、图10所示:图7图8面向对象课程设计报告第11 页,共11 页图104.对于数据的编辑,该实验实现了剪切、复制、粘体、撤销和删除等基本功能。
程序设计_文本编辑器的设计与实现.
程序设计_文本编辑器的设计与实现.程序设计报告(2014/2015学年第一学期)题目:文档编辑器的设计与实现专业组长学号姓名组员学号姓名指导教师指导单位日期成员分工组长()对文件操作功能(查找,删除,插入)的代码编写,报告中概要设计与代码调试问题部分的撰写组员()统计功能代码的编写,翻阅书籍查找资料,报告中课程设计总结及需求分析部分的撰写组员()可操作的主菜单及主函数部分代码的编写,报告整体的撰写及测试数据及其结果分析,制图等评分细则评分项优秀良好及格差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简单评语教师签名年月日评分等级备注评分等级分为五种:优秀,良好,中等,及格,不及格文档编辑器的设计与实现一课题内容与要求文档编辑器系统是对一个文本内容进行各种常规操作,例如:插入、删除、查找、替换等功能。
通过此课题,熟练掌握文本文件的操作及用字符数组来实现字符串操作的功能。
基本要求:(1)首先文件标准化处理:如果句子有前导空格和后导空格,则删除这些空格,单词与单词之间只保留一个空格。
(2)统计功能:可方便地统计出文档中所有出现次数最多和最少的字符串。
(3)查找与替换功能:能够查找任意一个字符串在文档中出现的次数,并可以选择全部或有选择地将其替换为另一个字符串。
(4)显示功能:编辑完成后可以显示编辑后的文档。
(5)抽取功能:根据要求将文件中的某一类字符抽取,并存入另外的文件,如抽取所有的数字、抽取所有的字母等。
二需求分析图一:文档编辑器系统的功能框架图编辑退出统计主菜单输入继续上次输入重输入大写字母个数小写字母个数数字的个数标点符号个数空格的个所有字数查找字符串删除字符串插入字符串显示当前内容(1)提供可操作的主菜单:输出个菜单,用于显示若干个可选的功能选项。
根据输入的选项来运行不同的功能,运行不同的函数。
C++课程设计报告(简易文本编辑器)
C++课程设计报告(简易文本编辑器)面向对象程序设计课程设计报告(2011/2012学年第二学期)题目名称简单文本编辑器的设计系部专业计算机科学与技术班级学生完成时间 2012年 6 月指导老师在文本编辑器出现前,人们用打孔机把计算机文字打到穿孔卡片上。
文字存放于一个装着这样的薄卡片的盒子里,可以用读卡器来阅读它。
第一个文本编辑器是一种行编辑器,它运行在打字机型的终端上,这种编辑器并不具备在窗口和屏幕中显示的功能。
它包含了一些非常短的命令(为了减少打字量)。
其中一个命令能够把文件的指定部分通过打字机打印出来。
编辑光标是想象中的一个插入点,通过特殊命令,可以把它移动到特定内容字符串所在的行。
随后,内容字符串又被扩展成正则表达式。
如果想看到文件的变化,你需要把它打印出来。
相对于穿孔机来说,人们认为这种基于行的文本编辑器具有革命性的进步。
如果没有它,用户就需要把那些处理文本的命令打成专用的卡片,并在编辑文件时使用这些卡片。
当带有显示屏的计算机终端出现后,基于显示屏的文本编辑器开始流行起来。
最早的全屏编辑器中,有一种叫做O26,它是于1967年为CDC 6000系列机器的操作控制台而作的。
另外一个早期的全屏编辑器是vi。
vi诞生于20世纪70年代,至今,它仍是Unix和Linux的标准编辑器。
全屏编辑器对视频终端的销售起到了促进的作用。
文本编辑器在Windows的应用中是一个非常重要的项目,在过去十数年中,微软对windows文本编辑器有多个版本的升级改进,而基于其他的编程环境的文本编辑器也是多如牛毛,今天我们用MFC可视化编译环境做一个简易的文本编辑器。
引言 (2)1.课程设计目的和意义 (4)2.详细设计 (4)2.1需求描述 (4)2.1.1文件 (4)2.1.2编辑 (4)2.1.3应用 (5)2.1.4帮助 (5)2.1.5高级 (5)2.2功能描述 (5)2.2.1文本编辑区 (5)2.2.2文件 (7)2.2.3编辑 (15)2.2.4应用 (16)2.2.5帮助 (21)2.2.6高级 (22)2.2.7菜单栏 (25)2.2.7图标 (26)2.3程序运行说明 (27)3.课程设计总结 (30)3.1编程日志 (30)3.3测试报告 (31)4.心得体会 (31)5.参考文献 (31)1.课程设计目的和意义《面向对象程序设计》课程设计是实践性教学环节之一,是《面向对象程序设计》课程的辅助教学课程。
Java课设_文本编辑器
Java课设_文本编辑器预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制目录第一章绪论 (1)一、Java语言特点 (1)二、Java发展前景 (2)第二章问题分析 (5)一、文本编辑器的设计 (5)二、功能、性能 (5)三、开发环境 (6)四、设计示意图 (6)第三章系统详细设计 (7)一、文件打开与保存对话框的设计 (7)二、调用颜色对话框的设计 (9)三、建立Choice下拉列表实现对字体的设计 (10)四、剪切,复制,粘贴的设计 (10)第四章代码实现 (12)一、字形,字体大小部分 (12)二、帮助中关于主题部分 (14)第五章测试与调试 (16)一、调试分析 (16)二、测试结果 (16)第六章总结与心得 (19)第七章附录 (20)一、源代码 (20)二、参考文献 (31)第一章绪论一、Java语言特点1、面向对象Java语言是一个完全面向对象的语言,并且对软件工程技术有很强分得支持:Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型:对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏:类提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。
2、平台无关性严格的语言定义:没有“依据机器的不同而不同”或“由编译器决定”等字限,最后的目标码都是一致:的:Java解释器生成与体系结构无关的字节码指令,只要安装了Java运行是系统,Java程序就可在任意的处理器上运行。
这些字节码指令对应于Java虚拟机中的表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平台运行。
3、安全问题Java是在网络环境下使用的语言,一个安全的网络至少要防止以下几种破坏的可能性;毁灭系统资源;消耗系统资源;挖掘系统或个人机密;骚扰正常工作的进行。
4、多线程单线程程序一个时刻只能做一件事情,多线程程序允许在同一时刻同时做多件事情;其他大多数高级语言,包括C,C++等,都不支持多线程,只能编写顺序执行的程序(除非有操作系统API的支持);Java提供现成的类Thread,只要继承这个类就可以编写多线程的程序;多线程机制使应用程序能够并行执行,而且同步机制保证了对共享数据的正确操作;通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易地实现网络上的实时交互行为。
Java程序设计实验报告文本编辑器的设计与实现
Java程序设计实验报告文本编辑器的设计与实现Java程序设计实验报告学生姓名:邵强学号:课程编号:06021801-0实验名称:文本编辑器的设计与实现实验内容:设计与实现一个文本编辑器,要求具有方便的图形用户界面,包括标题栏、菜单栏,菜单栏有相关的菜单和菜单项,有快捷键,具有编辑、打开、保存、复制、粘贴等功能(详细功能要求经过运行提供的字节码文件来确定,主类是JNotePadUI)。
完成有关类的设计,并调试运行,给出有代表性的程序输出结果(程序运行截图)。
程序代码如下:package note;import java.awt.*;import java.awt.event.*;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.*;import javax.swing.*;public class Mynote extends JFrame implements ActionListener{ JMenu menuFile; JMenu menuEdit ; JMenu menuAbout; JPopupMenu popUpMenu;JTextArea txt=null; //编辑区JLabel lab=new JLabel("未修改");JFileChooser fileChooser = new JFileChooser();File saveFileName = null, fileName = null;public Mynote(String s){super(s);createMenuBar(); //菜单栏createContentPane(); //文本编辑区组件setBounds(100,100,600,450);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ closeFile(); } });setVisible(true); }public void createMenuBar() {JMenuBar menuBar = new JMenuBar();menuFile = new JMenu("文件");menuEdit = new JMenu("编辑");menuAbout= new JMenu("关于");menuBar.add(menuFile);menuBar.add(menuEdit);menuBar.add(menuAbout);JMenuItem itemOpen = new JMenuItem("打开"); menuFile.add(itemOpen);itemOpen.addActionListener(this);menuFile.addSeparator();JMenuItem itemSave = new JMenuItem("保存");menuFile.add(itemSave);itemSave.addActionListener(this);JMenuItem itemSaveas=new JMenuItem("另存为"); menuFile.add(itemSaveas);itemSaveas.addActionListener(this);menuFile.addSeparator();JMenuItem itemQuit = new JMenuItem("关闭");menuFile.add(itemQuit);itemQuit.addActionListener(this);JMenuItem itemCut = new JMenuItem("剪切");menuEdit.add(itemCut);itemCut.addActionListener(this);JMenuItem itemCopy = new JMenuItem("复制");menuEdit.add(itemCopy);itemCopy.addActionListener(this);JMenuItem itemPaste= new JMenuItem("粘贴");menuEdit.add(itemPaste);itemPaste.addActionListener(this);JMenuItem itemAboutnote = new JMenuItem("关于NotePad");menuAbout.add(itemAboutnote);itemAboutnote.addActionListener(this);//右键菜单JMenuItem Copyitem=new JMenuItem("复制");Copyitem.addActionListener(this);JMenuItem Cutitem=new JMenuItem("剪切");Cutitem.addActionListener(this);JMenuItem Pasteitem=new JMenuItem("粘贴");Pasteitem.addActionListener(this);popUpMenu=new JPopupMenu();popUpMenu.add(Copyitem);popUpMenu.add(Cutitem);popUpMenu.add(Pasteitem);//快捷键itemOpen.setAccelerator(KeyStroke.getKeyStroke('O',Event.CTRL_MAS K,false));itemSave.setAccelerator(KeyStroke.getKeyStroke('S',Event.CTRL_MASK ,false));itemSaveas.setAccelerator(KeyStroke.getKeyStroke('A',Event.CTRL_MA SK,false));itemQuit.setAccelerator(KeyStroke.getKeyStroke('Q',Event.CTRL_MAS K,false));itemCut.setAccelerator(KeyStroke.getKeyStroke('X',Event.CTRL_MASK, false));itemCopy.setAccelerator(KeyStroke.getKeyStroke('C',Event.CTRL_MAS K,false));itemPaste.setAccelerator(KeyStroke.getKeyStroke('V',Event.CTRL_MAS K,false));setJMenuBar(menuBar);}private boolean isChanged(){if(lab.getText().equals("未修改"))return false;else return true;}public void actionPerformed(ActionEvent e){int option=-1;if(e.getActionCommand().equals("打开")) option=0;if(e.getActionCommand().equals("保存")) option=1;if(e.getActionCommand().equals("另存为")) option=2;if(e.getActionCommand().equals("关闭")) option=3;if(e.getActionCommand().equals("剪切")) option=4;if(e.getActionCommand().equals("复制")) option=5;if(e.getActionCommand().equals("粘贴"))option=6;if(e.getActionCommand().equals("关于NotePad")) option=7;switch(option){case 0:{if(!isChanged()){ open(); }else{ int option2=JOptionPane.showConfirmDialog(this,"文件已修改,是否保存?","保存文件?",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE,null);switch(option2){case JOptionPane.YES_OPTION:saveFile();//保存文件break;case JOptionPane.NO_OPTION:open();break;}}break;}case 1:saveFile();break;case 2:saveFileAs();break;case 3:closeFile();break;case 4:Cut();break;case 5:Copy();break;case 6:Paste();break;case 7:about();break;default:break;}}public void createContentPane() //文本编辑区组件{JScrollPane scrollPane; //滑动条txt = new JTextArea(10,30);txt.setEditable(true);txt.setFont(new Font("宋体",Font.PLAIN,18));txt.setLineWrap(true);scrollPane = new JScrollPane(txt);add(scrollPane, BorderLayout.CENTER);add(lab,BorderLayout.SOUTH);txt.addKeyListener(new KeyAdapter(){public void keyTyped(KeyEvent e){ lab.setText("已修改"); }});txt.addMouseListener(new MouseAdapter(){public void mouseReleased(MouseEvent e){if(e.getButton()==MouseEvent.BUTTON3)popUpMenu.show(e.getComponent(),e.getX(),e.getY());}public void mouseClicked(MouseEvent e){if(e.getButton()==MouseEvent.BUTTON1)popUpMenu.setVisible(false);}});}private void open(){int option=fileChooser.showOpenDialog(this);if(option==JFileChooser.APPROVE_OPTION){ try{ //打开所选文件BufferedReader buf=new BufferedReader(new FileReader(fileChooser.getSelectedFile()));//设置文件标题setTitle(fileChooser.getSelectedFile().toString());//删除前一次文件txt.setText("");//设置状态栏lab.setText("未修改");//取得系统相依的换行符StringlineSeparator=System.getProperty("line.separator");//读取文件并附加至文字编辑区String text;while((text=buf.readLine())!=null){txt.append(text);txt.append(lineSeparator);}buf.close();}catch(IOException e){JOptionPane.showMessageDialog(this,e.toString(),"打开文件失败",JOptionPane.ERROR_MESSAGE);} }}private void saveFile(){//从标题栏取得文件名称File file=new File(getTitle());//若指定文件不存在if(!(file.exists())){ saveFileAs(); }else{ try{ //打开指定文件BufferedWriter buf=new BufferedWriter(new FileWriter(file));//将文字编辑区的文字写入文件buf.write(txt.getText());buf.close();//设置状态栏为未修改lab.setText("未修改");}catch(IOException e){JOptionPane.showMessageDialog(this, e.toString(),"写入文件失败",JOptionPane.ERROR_MESSAGE); }}}private void saveFileAs(){ //显示对话框int option3=fileChooser.showSaveDialog(this);//如果确认选择文件if(option3==JFileChooser.APPROVE_OPTION){ //取得选择的文件File file=fileChooser.getSelectedFile();//在标题栏上设置文件名称setTitle(file.toString());try{ //建立文件file.createNewFile();//进行文件保护saveFile();}catch(IOException e){ JOptionPane.showMessageDialog(this,e.toString(),"无法建立文件",JOptionPane.ERROR_MESSAGE);}}}private void closeFile(){//是否已保存文件if(!isChanged()) dispose();else{int option= JOptionPane.showConfirmDialog(this,"文件已修改,是否保存?","保存文件?",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE,null);switch(option){case JOptionPane.YES_NO_OPTION:saveFile();case JOptionPane.NO_OPTION:dispose();}}}private void Cut(){txt.cut();lab.setText("已修改");popUpMenu.setVisible(false);}private void Copy()txt.copy();popUpMenu.setVisible(false);}private void Paste(){txt.paste();lab.setText("已修改");popUpMenu.setVisible(false);}private void about(){//显示对话框JOptionPane.showOptionDialog(this,"程序名称\n"+" JNotePad\n"+"简介:\n"+" 一个简单的文字编辑器\n","关于JNotePad",JOptionPane.DEFAULT_OPTION,RMATION_MESSAGE,null,null,null);}public static void main(String args[]) {new Mynote("陆庆庆");}程序有代表性的输出结果及结果分析:这是其中的几个画面截图。
java文本编辑器的设计与实现 2
摘要当今,计算机以及网络技术的飞速发展,社会正快速向信息化社会前进,我们需要更智能,更专业的软件帮助我们完成工作,从而提高了工作效率。
目前文本编辑器种类很多,所提供的功能也很多,但是能满足用户实现多种功能和进行Java的编译与运行很少,不能更好的适应当前用户的要求。
本设计所完成的文本编辑器功能是针对学习Java程序语言,因此我们利用Java程序设计虚拟机和软件对用户及使用者的应用过程形成一整套完整的编写代码,编译,运行。
本文本编辑器的开发主要包括界面窗口的菜单栏和工具栏以及树结构,还有链接Java虚拟机实现编译与运行。
使用SUN公司的Java中的GUI作为开发技术,利用其提供的各种类与接口,首先建立系统应用原型。
本文本编辑器的开发采用JDK6.0和 UltraEdit为开发工具,操作系统为Windows98/Windows 2000/Windows XP等。
关键词:面向对象程序设计,GUI,文本编辑器,编译,运行AbstractNow, computer and internet are experience a sharp development, the information automatic function is more and more powerful, and our society is stepping in the information age. So, more Intelligence and more specialized soft are needed to help us improve the efficiency in job.At present the text editor type are many, the function provided are also many too, But can satisfy the user for many kinds of functions and can use Java for the translation and debug are very few, so can not adapt current user's request much better. This design completes the text editor function is aims at the Java beginner who study the Java program language, Therefore we use the Java programming hypothesized machine and software form an entire set of complete compilation code to the formation user's application process, translation, debug.This text editor's development mainly includes the contact of surface menu of the window and the tool fence as well as the tree structure, also links to the java hypothesized machine to the translation and debug. Use Java GUI API, and the classes of SUN Corporation to found the initial prototype system, then, carries on the demand iteration to the initial prototype system, unceasingly reversing and improvement, until forms the feasible system.This text editor's development uses JDK6.0 and Ultra Edit as the development kit, operate system for Windows98/ Windows 2000/ Windows/XP Keywords: OOP, java, GUI(Graphical User Interface),text editor, translation, debug.目录1 前言 (1)2 问题的提出及可行性研究 (2)2.1问题的提出及定义 (2)2.2可行性研究 (2)2.2.1 对现行文本编辑器的分析 (2)2.2.2 新文本编辑器的可行性研究分析 (2)3 用户需求分析 (4)3.1用户调查 (4)3.2确定目标系统的功能 (4)4 系统设计与开发环境 (5)4.1系统相关类的设计 (5)4.2开发语言及其开发环境 (9)4.2.1开发语言概述 (9)4.2.2 Java开发环境——JDK的介绍 (11)4.3环境变量的设置 (12)4.3.1.环境变量的作用 (12)4.3.2 如何设置环境变量 (13)5 关键技术和源代码的实现 (15)5.1关键技术剖析 (15)5.2源码分析 (15)6 系统测试 (33)6.1测试方案 (33)6.2测试项目 (34)6.3编辑器截图演示 (34)致谢 (35)参考文献 (36)1 前言Java可以方便的开发GUI程序,在Java语言提供的GUI构建工具中,可以分为“组件(component)”和“容器”(container)两种。
图形和文字编辑器面向对象程序设计实验报告
面向对象课程设计报告——图片文本编辑器班级:学号:姓名:一、课程设计题目图片文本编辑器二、需求分析2.1开发背景由于对于现在的电脑族对电脑的使用频率逐年增大,对电脑的具有依赖性。
其中不乏有对文本的编辑的需求,因此,我们团队试做了一款文本编辑器的应用程序,对文本编辑器的相关功能做了一定的实现,既简单又实用。
本软件为一个简单而且很实用的文本编辑的工具,不但可以进行一些文字的输入和文本的读取,而且,该文本编辑器也可以对文本进行一些保存,另存,剪切,粘贴,删除等常规的操作:而且添加了图形编辑起的功能,可以对图形进行简单的处理,是一款比较适合广大普通用户和非计算机专业的用户的图片查看和文本编辑的处理软件,本软件不但界面友好,功能齐全,而且操作简单。
是款比较容易操作,实用的图文管理软件。
2.2开发与运行环境开发环境:Windows 7开发工具:Microsoft Visual studio2010 C#硬件环境: CPU:2.6GHz、内存:4G、硬盘:500G运行环境:Windows 7/XP/2003三、概要设计3.1功能简要概述文本编辑器的功能是对windows的记事本的精简版本,使用更方面快捷。
3.2系统框架设计根据系统功能分析,经过模块化的分析得到如下图所示的系统功能模块结构图。
四、详细设计4.1界面设计1.程序运行主界面如下图:2、文本编辑器界面如下图:五、程序使用说明、测试分析及结果5.1.使用说明图片文本编辑器的使用说明:打开程序主界面后,通过点击“图片编辑器”按钮或者“文本编辑器”按钮可跳转到相应的视图界面。
1、图片编辑器的运行:2、文本编辑器的运行:打开文本编辑器的主界面后,可以直接编辑文本,也可以选择实现相应功能:文件菜单中包括新建,打开,保存,另存为,和退出;编辑菜单中包括剪切,粘贴,复制,全选,清空,显示时间;格式;查看等功能对编辑的进行编辑5.2.分析与结果(1) 主界面的文本编辑器的标志图片变换:每100MS执行一次private void button2_Click(object sender, EventArgs e){frm_notePad frmn = new frm_notePad();frmn.Show();}(2)文本编辑器按键出发的实现::private void button2_Click(object sender, EventArgs e){frm_notePad frmn = new frm_notePad();frmn.Show();}(3)窗体的初始化:private void frm_notePad_Load(object sender, System.EventArgs e) //窗体加载时的初始化属性{//this.txt_notePad.Dock=DockStyle.Fill;this.txt_notePad.WordWrap=true;this.txt_notePad.ScrollBars=ScrollBars.Both;this.txt_notePad.SelectedText="";this.stat_LnColShow.Visible=false;stat_LnColShow_Resize(this,e);this.open_FileName="";this.mnu_formatLineWrap.Checked=true; //是否打钩this.mnu_viewStateBar.Checked=false;this.sfdlg.OverwritePrompt=true;this.ofdlg.CheckFileExists=true;this.ofdlg.CheckPathExists=true;this.fontDlg.ShowColor=true;this.fontDlg.ShowEffects=true;this.mnu_editCut.Enabled = false; //是否可选择(灰色还是黑色)this.mnu_editCopy.Enabled=false;this.mnu_editDelete.Enabled=false;}(4)开始选项的实现:新建:private void mnu_fileNew_Click(object sender, System.EventArgs e) {if(this.open_FileName!=""){StreamReader sr=new StreamReader(this.open_FileName); //读入流if(this.txt_notePad.Text==sr.ReadToEnd())this.txt_notePad.Clear();//else{DialogResult dlgResult=MessageBox.Show("文件"+this.open_FileName+" 的文字已经改变。
JAVA程序设计题: 文本编辑器设计资料
JAVA程序设计题:文本编辑器设计【问题描述】实现类似Windows操作系统“记事本”的功能。
它是一个简单的文本文档编辑器,可以创建、查看或编辑文本文件。
【实验目的】要求学生能熟练使用基于Swing的GUI设计,熟练使用常用组件和容器,理解java事件处理机制,会查看API documentation完成设计任务,熟练文件流的操作。
【基本功能】设计一个文本编辑器,通过菜单组件可以创建、查看或编辑文本文件。
增加对文件的存贮、剪切和黏贴等功能功能的其他扩展package com.huangyilun.work;import java.awt.*;import java.awt.event.*;import java.io.File;import java.io.FileInputStream;import java.io.FileWriter;import javax.swing.*;public class Notice_B08010332 extends JFrame {public static void main(String[] args) {new Notice_B08010332();}public Notice_B08010332() {super("新建文本文件");setUpUIComponent();setUpEventListener();setVisible(true);this.showForm();}private void showForm(){//侦听窗口关闭操作setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE);addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {dispose();System.exit(0);}});}private void setUpUIComponent() {setSize(640, 480);// 菜单栏JMenuBar menuBar = new JMenuBar();// 设置「文件」菜单JMenu fileMenu = new JMenu("文件");menuOpen = new JMenuItem("打开");// 快捷键设置menuOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));menuSave = new JMenuItem("保存");menuSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));menuSaveAs = new JMenuItem("另存为");menuClose = new JMenuItem("关闭");menuClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_MASK));fileMenu.add(menuOpen);fileMenu.addSeparator(); // 分隔线fileMenu.add(menuSave);fileMenu.add(menuSaveAs);fileMenu.addSeparator(); // 分隔线fileMenu.add(menuClose);// 设置「编辑」菜单JMenu editMenu = new JMenu("编辑");menuCut = new JMenuItem("剪切");menuCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));menuCopy = new JMenuItem("复制");menuCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));menuPaste = new JMenuItem("粘贴");menuPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));editMenu.add(menuCut);editMenu.add(menuCopy);editMenu.add(menuPaste);menuBar.add(fileMenu);menuBar.add(editMenu);setJMenuBar(menuBar);// 文字编辑区域textArea = new JTextArea();textArea.setFont(new Font("宋体", Font.PLAIN, 16));textArea.setLineWrap(true);JScrollPane panel = new JScrollPane(textArea,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);Container contentPane = getContentPane();contentPane.add(panel, BorderLayout.CENTER);// 状态栏stateBar = new JLabel("未修改");stateBar.setHorizontalAlignment(SwingConstants.LEFT);stateBar.setBorder(BorderFactory.createEtchedBorder());contentPane.add(stateBar, BorderLayout.SOUTH);popUpMenu = editMenu.getPopupMenu();}private void setUpEventListener() {// 按下窗口关闭钮事件处理addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {closeFile();}});// 菜单- 打开menuOpen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {openFile();}});// 菜单- 保存menuSave.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {saveFile();}});// 菜单- 另存为menuSaveAs.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveFileAs();}});// 菜单- 关闭文件menuClose.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { closeFile();}});// 菜单- 剪切menuCut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cut();}});// 菜单- 复制menuCopy.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {copy();}});// 菜单- 粘贴menuPaste.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {paste();}});// 编辑区键盘事件textArea.addKeyListener(new KeyAdapter() {public void keyTyped(KeyEvent e) {processTextArea();}});// 编辑区鼠标事件textArea.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) {if (e.getButton() == MouseEvent.BUTTON3)popUpMenu.show(editMenu, e.getX(), e.getY());}public void mouseClicked(MouseEvent e) {if (e.getButton() == MouseEvent.BUTTON1)popUpMenu.setVisible(false);}});}private void openFile() {if (isCurrentFileSaved()) { // 文件是否为保存状态open(); // 打开} else {// 显示对话框int option = JOptionPane.showConfirmDialog(null, "文件已修改,是否保存?","保存文件?", JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE, null);switch (option) {// 确认文件保存case JOptionPane.YES_OPTION:saveFile(); // 保存文件break;// 放弃文件保存case JOptionPane.NO_OPTION:open();break;}}}private boolean isCurrentFileSaved() {if (stateBar.getText().equals("未修改")) {return true;} else {return false;}}private void open() {JFileChooser chooser = new JFileChooser();chooser.showOpenDialog(this);File file = chooser.getSelectedFile();currFile = file;String str = "";try{FileInputStream fileinput = new FileInputStream(file.getAbsolutePath());int x = fileinput.available();byte b[] = new byte[x];fileinput.read(b);str = new String(b);}catch(Exception e){e.printStackTrace();}if (file != null)this.textArea.setText(str);}private void saveFile() {String str = this.textArea.getText();if(currFile != null && !currFile.equals("")){try{FileWriter out = new FileWriter(currFile);out.write(str);out.close();}catch(Exception e){e.printStackTrace();}}else{saveFileAs();}stateBar.setText("已保存");}private void saveFileAs() {JFileChooser chooser = new JFileChooser();chooser.showOpenDialog(this);File file = chooser.getSelectedFile();currFile = file;String str = this.textArea.getText();if(currFile != null && !currFile.equals("")){try{FileWriter out = new FileWriter(currFile);out.write(str);out.close();}catch(Exception e){e.printStackTrace();}}stateBar.setText("已保存");}private void closeFile() {// 是否已保存文件if (isCurrentFileSaved()) {// 释放窗口资源,而后关闭程序dispose();} else {int option = JOptionPane.showConfirmDialog(null, "文件已修改,是否保存?","保存文件?", JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE, null);switch (option) {case JOptionPane.YES_OPTION:saveFile();break;case JOptionPane.NO_OPTION:dispose();}}}private void cut() {textArea.cut();stateBar.setText("已修改");popUpMenu.setVisible(false); }private void copy() {textArea.copy();popUpMenu.setVisible(false); }private void paste() {textArea.paste();stateBar.setText("已修改");popUpMenu.setVisible(false); }private void processTextArea() { stateBar.setText("已修改");}private JMenuItem menuOpen; private JMenuItem menuSave; private JMenuItem menuSaveAs; private JMenuItem menuClose; private JMenu editMenu; private JMenuItem menuCut; private JMenuItem menuCopy;private JMenuItem menuPaste;private JTextArea textArea;private JLabel stateBar;private JPopupMenu popUpMenu;private File currFile;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告书课程名称面向对象程序设计设计题目文本编辑器的设计与实现专业班级学号姓名指导教师年月目录1 设计时间 (1)2 设计目的 (1)3设计任务 (1)4 设计内容 (1)4.1需求分析 (1)4.2概要设计 (1)4.2.1功能结构图 (1)4.3详细设计 (2)4.3.1流程图 (3)4.4系统的功能实现 (4)4.4.1类或包的加载 (5)4.4.2设计一个主类,变量的定义 (5)4.4.3文件操作功能的实现 (6)4.5运行测试 (25)4.5.1文本编辑器界面 (25)4.5.2各功能菜单界面 (25)5 总结与展望 (26)参考文献 (26)成绩评定 (27)1 设计时间2011年12月19日~2011年12月25日2 设计目的本次设计是学习完《java6程序设计》课程后进行的一次全面的综合练习,目的是加深对本学期课程的理解,通过设计文本编辑器并实现其功能来熟练掌握java语言基础,初步掌握软件开发的基本方法与技术将理论课程中学到的知识运用到实践中,实现有一定规模的Java应用。
3设计任务本次设计的主要任务是文本编辑器的设计与实现,要求设计一个类似于Windows记事本(Notepad)的Java程序。
可以打开、新建、保存一个文本文件;对选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、查找、替换等);在文本中能够插入对象。
4 设计内容4.1需求分析现在网络上各种文本编辑器数不胜数,有EmEditor ,UEStudio ,GridinSoft Notepad ,Notepad++,win32pad ,SkimEdit,UniRed,xint 。
功能也是应有尽有,有能改变字体的,有能改变文字颜色的。
但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。
仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。
本程序设计就是依照这样一种使用需要设计了一个简单的文本编辑器程序。
4.2概要设计4.2.1功能结构图文本编辑器文件菜单编辑菜单格式菜单查找菜单帮助菜单新建打开退出保存另存为剪切全部替换删除粘贴复制插入文本替换自动换行颜色字体向前查找向后查找关于帮助主题4.3详细设计4.3.1流程图(1)文件:(2)编辑:文件菜单打开 确定另存为保存选择打开文件位置选择文件存放位置编辑菜单插入文本 替换全部替换输入查找和替换内容输入要插入的文本确定(3)格式:(4)查找:(5)其他各功能菜单可直接点击完成操作4.4系统的功能实现格式颜色字体选择所需颜色选择所需字体确定查找 确定向前查找向后查找输入查找内容4.4.1类或包的加载import java.awt.*;import java.awt.event.*;import java.awt.datatransfer.*;import javax.swing.*;import java.io.*;import ng.*;4.4.2设计一个主类,变量的定义public class Notepad extends JFrame{private final Color colorvalues[] ={ Color.black, Color.blue, Color.red, Color.green }; //定义颜色数组String styleNames[] = { "Bold", "Italic" };//定义风格数组String fontNames[] = { "宋体", "华文行楷", "隶书" };//字体数组String[] sizeString = new String[30];//字号数组int[] size = new int[30];//与字号数组对应的字号整数,用于设置文字大小private JRadioButtonMenuItem colorItems[], fonts[];private JCheckBoxMenuItem styleItems[];private JTextArea displayText;//定义文本编辑区private ButtonGroup fontGroup, colorGroup;//字体组,跟字色组private int style;//字体风格private JScrollPane scroll;//为文本编辑区提供滚动条private String selectText = "";//存放文本编辑区中选中的文本内容private JComboBox styleBox,fontBox,sizeBox;//工具栏private JPanel toolPanel;//存放工具栏private int rowNumber = 0;private FileDialog fd = new FileDialog(this);// set up GUIpublic Notepad(){super( "记事本" );//标题//创建菜单条JMenuBar bar = new JMenuBar();setJMenuBar( bar );/*---------------------------------------------------------------------------------------*/ 4.4.3文件操作功能的实现// 设置文件菜单及其菜单项JMenu fileMenu = new JMenu( "文件(F)" );fileMenu.setMnemonic( 'F' );// 设置新建菜单项JMenuItem newItem = new JMenuItem( "新建(N)" );newItem.setMnemonic( 'N' );fileMenu.add( newItem );newItem.addActionListener(new ActionListener() {public void actionPerformed( ActionEvent event ){displayText.setText("");}});// 设置打开菜单项JMenuItem openItem = new JMenuItem( "打开(O)" );openItem.setMnemonic( 'O' );fileMenu.add( openItem );openItem.addActionListener(new ActionListener() {public void actionPerformed( ActionEvent event ){fd.setTitle("打开"); //设置标题fd.show();if (fd.getFile() != null) {File file = new File(fd.getFile()); //用从fd中取得的文件建立新文件,即打开的文件displayText.setText( "");try {FileReader f = new FileReader(file);BufferedReader b = new BufferedReader(f);//按行读打开的文件,然后传入文本域String s;try {while ((s = b.readLine()) != null) {displayText.append(s + "\n");//将给定文本追加到文本域的当前文本(即把读的内容加入文本域)}f.close();b.close();} catch (IOException ex) {}} catch (FileNotFoundException ex) {}}else {return;}}});fileMenu.addSeparator(); //加分隔线// 设置保存菜单项JMenuItem saveItem = new JMenuItem( "保存(S)" );saveItem.setMnemonic( 'S' );fileMenu.add( saveItem );saveItem.addActionListener(new ActionListener() {public void actionPerformed( ActionEvent event ){ fd.setFile("*.java");fd.setMode(FileDialog.SA VE);fd.setTitle("保存");fd.show();if (fd.getFile() != null) {File file = new File(fd.getFile());try {PrintWriter pw = new PrintWriter(new FileOutputStream(file));//1.5版本之前用这一句,之后可以用PrintWriter pw = new PrintWriter(file);pw.print(displayText.getText());//这一部分用于把textArea1中的内容打印到pw指定的文件file中去,file围在对话框中选定的文件pw.flush(); //刷新该流的缓冲,然后关闭该流pw.close();} catch (FileNotFoundException ex) {ex.printStackTrace();}}else {return;}}});// 设置另存为菜单项JMenuItem saveAsItem = new JMenuItem( "另存为(Z)" );saveAsItem.setMnemonic( 'Z' );fileMenu.add( saveAsItem );saveAsItem.addActionListener(new ActionListener() {public void actionPerformed( ActionEvent event ){ fd.setFile("*.java");fd.setMode(FileDialog.SA VE);fd.setTitle("另存为");fd.show();if (fd.getFile() != null) {File file = new File(fd.getFile());try {PrintWriter pw = new PrintWriter(new FileOutputStream(file));//1.5版本之前用这一句,之后可以用PrintWriter pw = new PrintWriter(file);pw.print(displayText.getText());//这一部分用于把textArea1中的内容打印到pw指定的文件file中去,file围在对话框中选定的文件pw.flush(); //刷新该流的缓冲,然后关闭该流pw.close();} catch (FileNotFoundException ex) {ex.printStackTrace();}}else {return;}}});fileMenu.addSeparator(); //加分隔线// 设置退出菜单项JMenuItem exitItem = new JMenuItem( "退出(X)" );exitItem.setMnemonic( 'x' );fileMenu.add( exitItem );exitItem.addActionListener(new ActionListener() {public void actionPerformed( ActionEvent event ){System.exit( 0 );}});bar.add( fileMenu );/*-------------------------------------------------------------------------------------------------*/ //创建编辑菜单及其菜单项JMenu editMenu = new JMenu( "编辑(E)" );editMenu.setMnemonic( 'E' );//剪切菜单选项JMenuItem cutItem = new JMenuItem( "剪切(T)" );cutItem.setMnemonic( 'T' );editMenu.add( cutItem );cutItem.addActionListener(new ActionListener(){public void actionPerformed( ActionEvent event ){selectText = displayText.getSelectedText();//取得选定的文本int start = displayText.getSelectionStart();//选定的文本的开始位置int end = displayText.getSelectionEnd();//选定的文本的结束位置displayText.replaceRange("", start, end);/*用指定替换文本替换指定开始位置与结束位置之间的文本。