• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用JBuilder實現類似Visual Studio的宏擴展功能

    發表于:2007-07-01來源:作者:點擊數: 標簽:
    對于Visual Studio的宏,大家應該很熟悉了,這是一篇關于JBuilder實現類似Visual Studio的宏擴展功能,我們就通過對一段代碼是否注釋掉作為簡單例子。大家可以實現自己的一些擴展,算是拋玉引磚了。 支持環境: Jbuilder 4.0 - JBuilder 7.0 使用JBuilder編


      對于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"))
    {
    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;
    else
    return 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;
    }
    }
    }


    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>