Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14490234
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:39: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: * 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 Namepublic 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 ctionimplements 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: * 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 EditorActionimplements 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 F10if(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();elseJOptionPane.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")){Keymap keymap = EditorManager.getKeymap();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);}}} protected Node getNode(){Browser browser = Browser.getActiveBrowser();Node node = browser.getActiveNode();if((node instanceof JavaFileNode) && (node.getProject() instanceof JBProject))return node;elsereturn null;} protected JotClass getClass(Node node){if((node instanceof JavaFileNode) && (node.getProject() instanceof JBProject)){JBProject project = (JBProject)node.getProject();String filename = ((JavaFileNode)node).getUrl().getFile();JotPackages pkg = project.getJotPackages();Url url = new Url(new File(filename));JotFile jfile = pkg.getFile(url);JotClass jclasses[] = jfile.getClasses();if(jclasses.length > 1){System.err.println("More than one class found in source file");errorMessageText = "More than one class found in source file";return null;}if(jclasses.length == 0){System.err.println("No classes found in source file");errorMessageText = "No classes found in source file";return null;} else{return jclasses[0];}} else{return null;}}}   对于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: * 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 Namepublic 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 ctionimplements 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: * 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 EditorActionimplements 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 F10if(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();elseJOptionPane.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")){Keymap keymap = EditorManager.getKeymap();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);}}} protected Node getNode(){Browser browser = Browser.getActiveBrowser();Node node = browser.getActiveNode();if((node instanceof JavaFileNode) && (node.getProject() instanceof JBProject))return node;elsereturn null;} protected JotClass getClass(Node node){if((node instanceof JavaFileNode) && (node.getProject() instanceof JBProject)){JBProject project = (JBProject)node.getProject();String filename = ((JavaFileNode)node).getUrl().getFile();JotPackages pkg = project.getJotPackages();Url url = new Url(new File(filename));JotFile jfile = pkg.getFile(url);JotClass jclasses[] = jfile.getClasses();if(jclasses.length > 1){System.err.println("More than one class found in source file");errorMessageText = "More than one class found in source file";return null;}if(jclasses.length == 0){System.err.println("No classes found in source file");errorMessageText = "No classes found in source file";return null;} else{return jclasses[0];}} else{return null;}}} 下载本文示例代码


用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能用JBuilder实现类似Visual Studio的宏扩展功能
阅读(194) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~