下载本文示例代码
对于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的宏扩展功能
阅读(213) | 评论(0) | 转发(0) |