积累系统性知识
积聚技术精华
  首页    个人中心    撰写积文    建立课题    订立目标    整理积文    管理课题    管理目标    技能Get    代码积累 
编写小型Java IDE
error997 (error997)    2014-11-20 20:31:14      目标    课题
   编写小型Java IDE
   作者:Y___Y
联系:yinwei_88@sina.com
   市面上有很多Java的IDE,比如Eclipse,Borland  JBuilder,NetBeans等等,它们的功能都很强大,但都有一个普遍的缺点,就是要求机器的配置比较高,所以对于想学习Java而机器配置不好的朋友,只能去下载JSDK,然后在控制台下,敲命令编译运行,麻烦至极。因此笔者用一些简单的技术来开发了一个小的Java IDE,将代码编辑,编译运行集成到一起,只需点几个按钮就可以,省去了在控制台下,敲命令,同时在代码编辑方面做了一些工作,实现了代码着色,自动缩进,使书写程序一目了然。大家可以在此基础上,作一些改进,从而使IDE的功能更加强大。实际上,大家可用笔者的代码整理的源代码,实现代码自动整理(笔者并没有做这方面的功能)。该IDE适合Java于初学者。
   代码整理参见http://blog.csdn.net/Y___Y/archive/2006/11/09/1376105.aspx
   本文全部源代码http://yyhlm.ys168.com
   为了提高各个功能的效率,笔者采用C++语言的来开发,鉴于  C++ Builder  在制作界面的优越性,最终选用C++ Builder 6来开发。
   注意,使用前先下载JSDK,安装,配置好后才能使用。
   各功能的实现。
   1.  界面布置
   
   2.编译与运行
   本质上依然采用的命令行编译与运行,所做的工作只是将其自动化。显然先将命令写为批处理文件,然后用ShellExecute来执行该批处理。
   部分代码(运行功能)如下
切换到: 纯代码  
   
   char dir[256];
   AnsiString s;
   FILE *fp;
   GetModuleFileName(NULL,dir,256);//获得IDE可执行文件的路径
   s=ExtractFilePath(AnsiString(dir))+"Run.bat";//批处理的文件名
   fp=fopen(s.c_str(),"w");
   if(!fp)
   {
   ShowMessage("无法执行");
   return;
   }
   
   //str存储的是Java源文件的路径
   s="javac "+ExtractFileName(AnsiString(str)); //编译命令
   fprintf(fp,"%s/n",s.c_str());
   s="java "+ExtractFileName(AnsiString(str)); //执行命令
   s[s.Length()-4]='/0';
   fprintf(fp,"%s/n",s.c_str());
   fprintf(fp,"pause/n");//暂停,以便查看编译和运行结果
   fclose(fp);
   s=ExtractFilePath(AnsiString(dir))+"Run.bat";
   ShellExecute(NULL,"open",s.c_str(),NULL,NULL,SW_SHOW);

   图示:
   3.代码着色
   这个功能最麻烦了。
   笔者将其分解为以下三步,
   (1)对一行着色
   (2)每个关键字着色
   (3)注释着色
   先看(2)的实现代码
   下面的CodesEdit为代码编辑框(RichEdit组件)
   其中int n代表要着色的行数。
   其中int pos代表要着色的行数的开始的位置,即该行距第一行的是一个字符之间的字符数。
   AnsiString s为要着色的关键字,cl为所着的颜色。
切换到: 纯代码  
   
   void TForm1::CharColor(int n,unsigned int pos,AnsiString s,TColor cl)
   {
   char *p=CodesEdit->Lines->Strings[n-1].c_str(),*q=p;
   while(p)
   {
   p=strstr(p,s.c_str());//搜寻该关键字
   if(!p)
   break;
   //isyh(p,q)为自定义函数(略去代码)判断关键字是否在双引号内,如果在,显然不着色。
   if((p==q||!isalnum(*(p-1)))&&!isalnum(*(p+s.Length()))&&isyh(p,q)==0)//判断关键字前后是否不为数字或字母
   {
   CodesEdit->SelStart=pos+(p-q); //即该关键字距第一行的是一个字符之间的字符数
   CodesEdit->SelLength=s.Length();
   CodesEdit->SelAttributes->Color=cl; //着色
   }
   p=p+s.Length();
   }
   }

   注释着色代码关键字着色相似,略去。
   再来看(1)对一行着色代码(摘录)
切换到: 纯代码  
   
   void __fastcall TForm1::LCodesColor(int n)
   {
   unsigned int pos=LinePos(n);// LinePos(n)为自定义函数,获得该行距第一行的是一个字符之间的字符数。
   
   CharColor(n,pos,AnsiString("class"),clBlue);
   //这里省略……………………..
   CharColor(n,pos,AnsiString("int"),TColor(RGB(255,0,255)));
   CharColor(n,pos,AnsiString("main"),clRed);
   LCommetColor(n,pos);// 注释着色
   }

   完成以上步骤后自学对每行作一下循环,即可完成对整个代码着色,对于多行注释/***多行注释***/需要作一下小处理就可以了(代码略去)。对于实时着色,处理一下键盘事件即可。
   代码缩进,实现较易,在此略去。
   本文全部源代码http://yyhlm.ys168.com

转自 http://blog.csdn.net/y___y/article/details/1402198
(+0)技能Get

建议楼主:搜索关键字 |参考其他资源 |回复 |追问
  error997(error997):   个人中心    课题    目标    代码积累