网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  用jbuilder实现类似visualstudio的宏扩展功能     
  文章作者:未知  文章来源:水木森林  
  查看:109次  录入:管理员--2007-11-17  
 
  对于visual studio的宏,大家应该很熟悉了,这是一篇关于jbuilder实现类似visual studio的宏扩展功能,我们就通过对一段代码是否注释掉作为简单例子。大家可以实现自己的一些扩展,算是抛玉引砖了。
  
  支持环境: jbuilder 4.0 - jbuilder 7.0
  
  使用jbuilder编译时需要在 project ---> project properties ---> required libaries中加上jbuilder下的 open tool sdk,编译成功后将生成的class打包成一个javacommentswitch.jar文件,其中包含这样一个文件meta-inf/manifest.mf,该文件内容如下:
  
  manifest-version: 1.0
  
  opentools-ui: javacommentswitch
  
  不需要什么详细的讲解,代码如下:
  
  /*===============================================
  文件一: ideactions.java
  ===============================================*/
  /**
  *
  
  title: jbuilder ide toolbox
  
  *
  description: http://www.vchelp.net/itbookreview/view_user.asp?user_name=ghost
  
  *
  copyright: copyright (c) 2002 ghost studio. all rights reserved.
  
  *
  company: ghost studio
  
  * @author 阿鬼 [mornlee@21cn.com]
  * @version 1.0
  */
  
  import com.borland.primetime.actions.actiongroup;
  import com.borland.primetime.editor.editorcontextactionprovider;
  import com.borland.primetime.editor.editorpane;
  import javax.swing.action;
  
  public class ideactions
  {
  private static final string string_actiongroupname = "jbuilder ide toolbox"; // activegroup's name
  public static final editorcontextactionprovider contextmenu_actionprovider = new editorcontextactionprovider()
  {
  public action getcontextaction(editorpane target)
  {
  actiongroup actiongroup = new actiongroup();
  actiongroup actionsubgroup = new actiongroup(string_actiongroupname);
  actionsubgroup.add(javacommentswitch.action_generatejavacommentswitch);
  // 此处可以增加更多的功能
  // ......
  actiongroup.add(actionsubgroup);
  return actiongroup;
  }
  
  public int getpriority()
  {
  return 0;
  }
  };
  
  public ideactions()
  {
  }
  
  static class ction
  implements editorcontextactionprovider
  {
  public action getcontextaction(editorpane target)
  {
  actiongroup actiongroup = new actiongroup();
  actiongroup actionsubgroup = new actiongroup(string_actiongroupname);
  actionsubgroup.add(javacommentswitch.action_generatejavacommentswitch);
  actiongroup.add(actionsubgroup);
  return actiongroup;
  }
  
  public int getpriority()
  {
  return 0;
  }
  
  ction()
  {
  }
  }
  
  }
  
  /*===============================================
  文件二: javacommentswitch.java
  ===============================================*/
  
  /**
  *
  
  title: jbuilder ide toolbox
  
  *
  description: http://www.vchelp.net/itbookreview/view_user.asp?user_name=ghost
  
  *
  copyright: copyright (c) 2002 ghost studio. all rights reserved.
  
  *
  company: ghost studio
  
  * @author 阿鬼 [mornlee@21cn.com]
  * @version 1.0
  */
  
  import com.borland.jbuilder.jot.*;
  import com.borland.jbuilder.node.jbproject;
  import com.borland.jbuilder.node.javafilenode;
  import com.borland.primetime.editor.*;
  import com.borland.primetime.ide.browser;
  import com.borland.primetime.node.filenode;
  import com.borland.primetime.node.node;
  import com.borland.primetime.vfs.url;
  import java.awt.event.actionevent;
  import java.beans.propertychangeevent;
  import java.beans.propertychangelistener;
  import java.io.file;
  import java.io.printstream;
  import javax.swing.*;
  import javax.swing.text.jtextcomponent;
  import javax.swing.text.keymap;
  
  public class javacommentswitch extends editoraction
  implements propertychangelistener
  {
  private static final string versionstring = "0.1";
  public static editoraction action_createjavacommentswitch = new javacommentswitch("javacommentswitch");
  protected static string str_long_description = "comment/uncomment for selection."; // 状态条显示
  protected static string str_short_description = "comment/uncomment for selection.";
  public static editoraction action_generatejavacommentswitch = new javacommentswitch("javacommentswitch", true);
  protected static string menu_str_long_description = "comment/uncomment for selection";
  protected static string menu_str_short_description = "comment/uncomment";
  static browser browser = null;
  private editorpane target;
  private string errormessagetext;
  private boolean ismenuaction;
  
  public javacommentswitch(string name)
  {
  super(name);
  target = null;
  errormessagetext = "";
  ismenuaction = false;
  }
  
  public javacommentswitch(string name, boolean ismenuaction)
  {
  super(name);
  target = null;
  errormessagetext = "";
  this.ismenuaction = ismenuaction;
  }
  
  public static void initopentool(byte majorversion, byte minorversion)
  {
  if(majorversion < 4) // 支持jbuilder 4.0以上
  return;
  editormanager.registercontextactionprovider(ideactions.contextmenu_actionprovider);
  action_generatejavacommentswitch.putvalue("longdescription", menu_str_long_description);
  action_generatejavacommentswitch.putvalue("shortdescription", menu_str_short_description);
  editoractions.addbindableeditoraction(action_createjavacommentswitch);
  action_createjavacommentswitch.putvalue("longdescription", str_long_description);
  action_createjavacommentswitch.putvalue("shortdescription", str_short_description);
  keymap keymap = editormanager.getkeymap(); // 支持快捷键 alt + f10
  if(keymap != null)
  {
  keystroke stroke[] = keymap.getkeystrokesforaction(action_createjavacommentswitch);
  if(stroke == null)
  keymap.addactionforkeystroke(keystroke.getkeystroke(java.awt.event.f10,
  java.awt.event.alt_mask ), action_createjavacommentswitch);
  }
  editormanager.addpropertychangelistener((propertychangelistener)action_createjavacommentswitch);
  }
  
  public void actionperformed(actionevent evt)
  {
  target = geteditortarget(evt);
  node thenode = getnode();
  if(thenode == null)
  return;
  jbproject proj = (jbproject)thenode.getproject();
  jotclass theclass = getclass(thenode);
  if(ismenuaction)
  if(theclass != null)
  runjavacommentswitch();
  else
  joptionpane.showmessagedialog(null,
       "current editor target is not a java class.",
       "error creating javadoc", 0);
  }
  
  /**
  * @description
  *
  * @param
  * @return
  * @exception
  */
  private boolean runjavacommentswitch()
  {
  string selection = target.getselectedtext();
  string newselection = "";
  // 去掉注释
  if(selection.trim().startswith("/*") && selection.trim().endswith("*/"))
  {
  stringbuffer sb = new stringbuffer(selection);
  newselection = sb.substring(2, selection.length() - 2);
  }
  // 添加注释
  else
  {
  newselection = string.valueof(string.valueof((new stringbuffer("/*")).append(selection).append("*/")));
  }
  target.replaceselection(newselection);
  return true;
  }
  
  public void propertychange(propertychangeevent evt)
  {
  string propertyname = evt.getpropertyname();
  if(propertyname.equals("keymap"))
  {
 
 
上一篇: java中文处理学习笔记——hello unicode    下一篇: servlet容器工作原理讲解(二)
  相关文档
浅谈java中的存储空间类型 11-17
java语言和c++语言的差异—老生常谈 11-17
java 关于中文乱码问题的解决方案与经验 (1) 11-17
rational rose介绍材料 11-17
基于jsf技术的web应用开发研究 11-17
如何使用java模拟.net的连接池 11-17
java笔记 11-17
struts 用户指南 11-17
安全的基础----学习java安全之前的准备 11-17
实战j2ee?开发购物网站(四) 11-17
web 2.0中ajax应用的详细探讨 11-17
使用技巧:运用加密技术保护java源代码 11-16
怎样学好java的一些总结 11-17
java内存泄露问题分析 11-16
确保j2me无线移动商业应用程序的安全性 11-17
mock 概述以及用 mock object 进行测试 11-17
从网上抓取指定url源码的方案 11-16
java applet编程入门之一 11-16
.net中掌握windows窗体间数据交互(1) 11-17
进阶--正则表达式的应用实例通俗说明 12-10
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息