一、概述
文本编辑器是一种最常用的应用程序,下面我们利用jbuilder 9集成开发环境,用java语言实现一个简单的文本编辑器。该文本编辑器具有读出、写入、编辑文本文件,可以设定文字颜色、字形和编辑区域背景颜色等基本功能。
我们首先通过jbuilder 9项目向导和应用向导创建项目,然后应用可视化设计工具,修改ui设计,连接事件,编辑源码以及常用控件和任务诸如菜单项、工具条、文本区域和系统事件等常用控件和任务的处理。涉及到具体技术有:
用jfilechooser 对话框让用户选择文本文件。
用jtextarea读、写和处理文本文件中的文字。
设置前景色和背景色。
用dbswing fontchooser对话框设置字型。
在状态栏和窗口标题栏显示信息。
手工添加处理ui事件的代码 。
通过将代码放在一个可被菜单项和按钮两个事件处理器调用的新的"帮助"方法中, 使得菜单项和按钮执行相同的代码。
给jtextarea控件增加一个右击菜单。
保持对文件的位置以及文件是否活动过的跟踪,展示对文件新建, 文件打开, 文件保存, 文件另存为,编辑和退出等逻辑的处理。
将"text editor" 应用程序展开为jar 文件。
二、开发文本编辑器java源程序说明
文本编辑器程序包含三个java 源程序即texteditframe.java、texteditclass.java 和texteditframe_aboutbox.java 程序,下面将分别介绍如下:
1、texteditframe.java的源程序代码(节选部分):
| package texteditor; //texteditframe.java import java.awt.*;//导入类 import java.awt.event.*; import javax.swing.*; import com.borland.dbswing.*; import java.io.*; import javax.swing.text.*; import javax.swing.event.*; public class texteditframe extends jframe { intlswingsupport intlswingsupport1 = new intlswingsupport(); //swing 控件互联网化:即本地化应用程序,需要添加一行代码以便swing 控件jfilechooser //和jcolorchooser出现在程序运行的语言中 jpanel contentpane; //设置内容窗(contentpane)的jpanel控件 jmenubar menubar1 = new jmenubar();//创建菜单条并加入到框架窗体中 jmenu menufile = new jmenu();//创建file菜单和相应的菜单项 jmenuitem menufileexit = new jmenuitem(); jmenu menuhelp = new jmenu();//创建help菜单和相应的菜单项 jmenuitem menuhelpabout = new jmenuitem(); jtoolbar toolbar = new jtoolbar();//创建工具条组件 jbutton jbutton1 = new jbutton();//创建按钮组件 jbutton jbutton2 = new jbutton(); jbutton jbutton3 = new jbutton(); imageicon image1;//定义图标 imageicon image2; imageicon image3; jlabel statusbar = new jlabel();//创建标签组件 borderlayout borderlayout1 = new borderlayout();//创建borderlayout 布局器 jscrollpane jscrollpane1 = new jscrollpane();//创建滚动窗控件 jtextarea jtextarea1 = new jtextarea();//创建多行文本域组件 jmenuitem jmenuitem1 = new jmenuitem();//创建菜单项 jmenuitem jmenuitem2 = new jmenuitem(); jmenuitem jmenuitem3 = new jmenuitem(); jmenuitem jmenuitem4 = new jmenuitem(); fontchooser fontchooser1 = new fontchooser();//创建字型选择对话框 jmenu jmenu1 = new jmenu(); jmenuitem jmenuitem5 = new jmenuitem(); jmenuitem jmenuitem6 = new jmenuitem(); jmenuitem jmenuitem7 = new jmenuitem(); jfilechooser jfilechooser1 = new jfilechooser();//创建文本选择对话框 string currfilename = null; // full path with filename. null means new/untitled. boolean dirty = false; document document1; //文本 dbtextdatabinder dbtextdatabinder1 = new dbtextdatabinder(); // true means modified text. //构造架框 public texteditframe() { enableevents(awtevent.window_event_mask); try { jbinit(); updatecaption(); } catch(exception e) { e.printstacktrace(); } } //组件初始化 private void jbinit() throws exception { //三个工具栏按钮图标 image1 = new imageicon(texteditframe.class.getresource("openfile.gif")); image2 = new imageicon(texteditframe.class.getresource("closefile.gif")); image3 = new imageicon(texteditframe.class.getresource("help.gif")); contentpane = (jpanel) this.getcontentpane();//内容创格 document1 = jtextarea1.getdocument();//多行文本域文档 contentpane.setlayout(borderlayout1);//borderlayout布局器 this.setsize(new dimension(400, 300));//窗口大小 this.settitle("text editor");//窗口标题 statusbar.settext(" "); menufile.settext("file"); menufileexit.settext("exit"); menufileexit.addactionlistener(new texteditframe_menufileexit_actionadapter (this)); //添加事件监听器 menuhelp.settext("help"); menuhelpabout.settext("about"); menuhelpabout.addactionlistener(new texteditframe_menuhelpabout_actionadapter (this)); jbutton1.seticon(image1);//设置三个工具栏按钮图标,添加事件监听器 jbutton1.addactionlistener(new texteditframe_jbutton1_actionadapter(this)); jbutton1.settooltiptext("open file"); jbutton2.seticon(image2); jbutton2.addactionlistener(new texteditframe_jbutton2_actionadapter(this)); jbutton2.settooltiptext("close file"); jbutton3.seticon(image3); jbutton3.addactionlistener(new texteditframe_jbutton3_actionadapter(this)); jbutton3.settooltiptext("about"); jtextarea1.setlinewrap(true); jtextarea1.setwrapstyleword(true); jtextarea1.setbackground(color.white); jmenuitem1.settext("new");//设置菜单,添加事件监听器 jmenuitem1.addactionlistener(new texteditframe_jmenuitem1_actionadapter(this)); jmenuitem2.settext("open"); jmenuitem2.addactionlistener(new texteditframe_jmenuitem2_actionadapter(this)); jmenuitem3.settext("save"); jmenuitem3.addactionlistener(new texteditframe_jmenuitem3_actionadapter(this)); jmenuitem4.settext("save as"); jmenuitem4.addactionlistener(new texteditframe_jmenuitem4_actionadapter(this)); fontchooser1.setframe(this); fontchooser1.settitle("font"); jmenu1.settext("edit"); jmenuitem5.settext("font"); jmenuitem5.addactionlistener(new texteditframe_jmenuitem5_actionadapter(this)); jmenuitem6.settext("foreground color"); jmenuitem6.addactionlistener(new texteditframe_jmenuitem6_actionadapter(this)); jmenuitem7.settext("background color"); jmenuitem7.addactionlistener(new texteditframe_jmenuitem7_actionadapter(this)); document1.adddocumentlistener(new texteditframe_document1_documentadapter(this)); dbtextdatabinder1.setjtextcomponent(jtextarea1); //turn off right-click file open... menu item. dbtextdatabinder1.setenablefileloading(false); //turn off right-click file save... menu item. dbtextdatabinder1.setenablefilesaving(false); toolbar.add(jbutton1);//工具组件添加按钮 toolbar.add(jbutton2); toolbar.add(jbutton3); menufile.add(jmenuitem1);//菜单组件添加菜单项 menufile.add(jmenuitem2); menufile.add(jmenuitem3); menufile.add(jmenuitem4); menufile.addseparator();//采单组件添加分隔线 menufile.add(menufileexit); menuhelp.add(menuhelpabout); menubar1.add(menufile); menubar1.add(jmenu1); menubar1.add(menuhelp); this.setjmenubar(menubar1); contentpane.add(toolbar, borderlayout.north); //内容窗设置borderlayout布局器 contentpane.add(statusbar, borderlayout.south); contentpane.add(jscrollpane1, borderlayout.center); jscrollpane1.getviewport().add(jtextarea1, null); jmenu1.add(jmenuitem5); jmenu1.add(jmenuitem6); jmenu1.add(jmenuitem7); } // display the about box. void helpabout() { texteditframe_aboutbox dlg = new texteditframe_aboutbox(this); dimension dlgsize = dlg.getpreferredsize(); dimension frmsize = getsize(); point loc = getlocation(); dlg.setlocation((frmsize.width - dlgsize.width) / 2 + loc.x, (frmsize.height - dlgsize.height) / 2 + loc.y); dlg.setmodal(true); dlg.show(); } ......... ......... |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器