Eclipse插件开拓之添加简朴的GUI元素
当前位置:以往代写 > JAVA 教程 >Eclipse插件开拓之添加简朴的GUI元素
2019-06-14

Eclipse插件开拓之添加简朴的GUI元素

Eclipse插件开拓之添加简朴的GUI元素

副标题#e#

编写Eclipse插件的要领很简朴,你只需要编写一个应用措施,并把它"添加"到Eclipse上。可是与编写音乐雷同,在可以或许创作一部著作之前,首先必需进修大量的相关常识。

本文将接头少许几个简朴的GUI元素:

· 东西条按钮

· 菜单项

· 对话框

为了利用这些元素,我们将稍微修改已有的插件,顺便编写一个可供利用的东西类。

扩展点(Extension Points)

我们不能随意地向Eclipse用户界面的任那里所添加窗口小部件,只能在非凡的、指定的、有记实的位置添加。这些位置被称为扩展点(extension points)。在根基的Eclipse安装中存在数以百计可供利用的扩展点。插件自身也可以宣布新的扩展点。我们来看一看列表中的扩展点。打开Invokatron项目(见天极网《Eclipse插件开拓快速入门》)中的plugin.xml文件,进入"扩展"(Extensions)属性页。"所有扩展"树列出了插件的差异的窗口部件,按照它们呈现时地址的扩展点来分类。譬喻Invokatron编辑器位于编辑器(org.eclipse.ui.editor)扩展点中。图1显示了这个属性页。

Eclipse插件开辟之添加简单的GUI元素

图1:扩展页

此刻请点击"添加"(ADD)按钮,呈现了图2所示的列表。

Eclipse插件开辟之添加简单的GUI元素

图2:新增扩展领导,扩展列表

上下转动这个列表可以看到许多可供利用的扩展点。你大概留意到了有两种范例的扩展点:带有扩展模板的(用加号标识)和不带扩展模板的。大大都常常用到的扩展点都带有用于帮助开拓扩展的模板。图2中选择的扩展点Action Set,带有一个叫做"Hello World"操纵集的模板。当你选择某个模板的时候,会呈现简短的描写。"下一个"页面将询问模板利用的参数。

此刻请封锁领导并返回到"扩展"属性页。选择"Invokatron编辑器"。在这个属性页中,你大概留意到了我们在领导中为Invokatron编辑器输入的信息。正常的扩展需要一个独一的标识符(ID字段)、一个供显示的名称(Name字段)和它所属的扩展点(Point字段)。从模板中成立的扩展(譬喻Invokatron编辑器)需要更多的参数。没有模板的扩展点也需要更多的信息,可是这些信息只能在文本编辑器中输入。

添加东西条按钮

此刻我们已经相识了扩展点是什么,让我们来添加一个扩展吧。我们首先添加的是一个东西条按钮。这个按钮将挪用我们前面成立的新的Invokatron领导。

添加东西条按钮有三个步调:

1.声明一个新扩展。

2.用特定的标志来扩充该声明。

3.编写操纵委托类

1.声明一个新扩展

我们已经知道奈何实现这个步调了。简朴地返回到扩展点下的plugin.xml编辑器。点击"添加"。东西条按钮在org.eclipse.ui.actionSets扩展点下面。不要利用模板,直接点击"完成"。输入下面一些内容:

· Id: NewInvokatronAction

· Name: New Invokatron Document Action

· Point: (利用默认值:org.eclipse.ui.actionSets)

返回plugin.xml属性页,Eclipse给这个文件添加了新的代码片段。


#p#副标题#e#

2.用特定的标志来扩充该声明

这个新扩展险些毫无内容。我们在下面添加一些标志(tag)。你知道可以利用哪些标志吗?你可以右键点击"所有扩展"树中的元素,选择"新增"菜单,会获得一个列表。你也可以查察Eclipse文档。

此刻我们看到本身可以在<extension>标志内部添加一个<actionSet>标志。它可以包括零个或多个<menu>标志,后头随着零个或多个<action>标志,还可以选择利用<description>标志。可是个中最重要的标志是<action>。它可以同时描写东西条按钮和菜单项。>BR>下面是我们将添加的东西条按钮的XML代码片段。个中的新代码是黑体的。我们在后头会分解这段代码。

<extension id="NewInvokatronAction"
  name="New Invokatron Document Action"
  point="org.eclipse.ui.actionSets">
<actionSet id="invokatron.actionSet"
  label="Invokatron Actions"
  visible="true">
 <action id="invokatron.wizard.RunWizardAction"
    toolbarPath="org.eclipse.ui.workbench.file/new.ext"
    icon="icons/InvokatronIcon16.gif"
    tooltip="Starts the New Invokatron Document Wizard."
    class="invokatron.wizard.RunWizardAction">
 </action>
</actionSet>
</extension>

#p#分页标题#e#

所有这些操纵都可以在plugin.xml编辑器顶用图形化的方法来完成,可是我们查察XML以明晰字段的完整文本内容。此处的<actionSet>标志只含有一个操纵(action)。操纵表示为菜单中的项或东西条中的按钮的工具。操纵的属性实在太多了,你可以在在线文档中查阅。个中最有趣的一些属性是:

· id:操纵的独一标识符。可以用于在运行时引用操纵。

· toolbarPath:安排东西条按钮的位置。

· icon:东西条按钮或菜单项左侧显示的图标。它是一个与开拓目次关联的16×16的GIF文件。请把 图片存放到Invokatron\icons文件夹中。这个文件夹已经被包括到二进制成立路径中,因此该图标将放入插件的文档目次中。

· tooltip:当鼠标逗留在东西条按钮上的时候呈现的文本内容。

· class:这些操纵的完整的及格的类名称。

关于东西条路径

东西条路径(toolbar path)指出了添加东西条按钮的位置。由于任何人都可以成立东西条,并且有时候一个按钮可以包括子选项,因此我们用分层的标识符列表来会见这个位置。下面是常常用到的东西条列表和它们的路径:

· 文件: org.eclipse.ui.workbench.file 带有一些民众的分组符号(你可以添加按钮的更多的位置):

o "新建"区:new.ext

o "生存"区:save.ext

o "打印"区:print.ext

o "成立"区:build.ext

· 导航: org.eclipse.ui.workbench.navigate

· 载入: org.eclipse.debug.ui.launchActionSet

· 编辑器暗示:org.eclipse.ui.edit.text.actionSet.presentation

· 搜索: org.eclipse.search.searchActionSet

· Java元素成立:org.eclipse.jdt.ui.JavaElementCreationActionSet

· 组: Team

· CVS: CVS

假如你提供的东西条ID不带有符号ID,你的按钮就会被添加到紧挨着这个东西条的一个新东西条之上。接着这个新东西条就可以被添加到Eclipse GUI上了。有时候你会看到利用东西条路径"正常的(Normal)"的插件。这是旧的名称转换。在Eclipse 3中这样利用的时候会成立一个叫作"Normal"的新东西条。假如你成立一个新东西条ID,你的东西条会被添加到"文件"东西条后头。

请留意"文件"东西条的"新建"组符号。这是我们添加本身的按钮的处所。由于符号ID是new.ext,完整的路径就是:

org.eclipse.ui.workbench.file/new.ext

#p#副标题#e#

3.编写操纵委托类

最后一步是编写少量的用于实现操纵的Java。这个类称为操纵委托。

package invokatron.wizard;
public class RunWizardAction extends Action
implements IWorkbenchWindowActionDelegate {
 /** 操纵被成立的时候挪用*/
 public void init(IWorkbenchWindow window) {}
 /** 操纵被删除的时候挪用*/
 public void dispose() {}
 /** 操纵被执行的时候挪用 */
 public void run(IAction action) {
  InvokatronWizard wizard= new InvokatronWizard();
  Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
  WizardDialog dialog= new WizardDialog(shell, wizard);
  dialog.create();
  dialog.open();
 }
 /** 编辑器中的工具被选中或打消选择的时候挪用*/
 public void selectionChanged(IAction action, ISelection selection) {}
}

添加菜单项

你也许猜到了添加菜单项与添加东西条按钮的进程险些沟通。你也必需声明一个扩展(同种范例的)、用特定的标志(沟通的标志)来扩充它,并编写操纵类(沟通的类)。其主要的差异点是扩展的声明。下面是菜单项的扩展XML代码(没有相应的东西条按钮):

<extension id="NewInvokatronAction"
    name="New Invokatron Document Action"
    point="org.eclipse.ui.actionSets">
 <actionSet id="invokatron.actionSet"
    label="Invokatron Actions"
    visible="true">
   <action id="invokatron.wizard.RunWizardAction"
     label="New Invokatron"
     menubarPath="file/new.ext"
     icon="icons/InvokatronIcon16.gif"
     tooltip="Starts the New Invokatron Document Wizard."
     class="invokatron.wizard.RunWizardAction">
   </action>
 </actionSet>
</extension>

标签(label)属性包括了显示在菜单项上的文本内容。键盘快捷键用"&"标记暗示,在XML中是&。下面是一个组合了菜单项和东西条按钮的例子:

#p#分页标题#e#

<extension id="NewInvokatronAction"
   name="New Invokatron Document Action"
   point="org.eclipse.ui.actionSets">
 <actionSet id="invokatron.actionSet"
    label="Invokatron Actions"
    visible="true">
  <action id="invokatron.wizard.RunWizardAction"
     label="New Invokatron"
     menubarPath="file/new.ext"
     toolbarPath="org.eclipse.ui.workbench.file/new.ext"
     icon="icons/invokatronPicture.gif"
     tooltip="Starts the New Invokatron Document Wizard."
     class="invokatron.wizard.RunWizardAction">
  </action>
 </actionSet>
</extension>

菜单与东西条只有稍微的差异。东西条只有一个"条理",而菜单有完整的条理。这也是用操纵来声明菜单这种要领可行的原因。菜单都罗列在<actionSet>标志之中,在<action>标志之上。它们的语法如下:

<menu id="unique.ID"
<!-- New menu at the top-level. The menubarPath
for actions inside this menu is: Special -->
path="Special"
label="This is a parent menu item.">
<!-- Optional, the menubarPath for actions after
this separator is: Special/BelowBar -->
<separator name="BelowBar">
</menu>

#p#副标题#e#

关于菜单条路径

菜单条路径(menubar path)指出了添加菜单项的位置。我们利用分层的标识符列表来会见这个位置。下面是常常利用的菜单条列表以及它们的路径和民众组符号:

· 文件:file

o "开始" 区:fileStart

o "新建"菜单内部的"附加"组符号: new/additions

o "新建"区,在"新建"菜单下面:new.ext

o "封锁" 区:close.ext

o "生存" 区:save.ext

o "打印" 区:print.ext

o "打开" 区:open.ext

o "导入" 区:import.ext

o "附加" 区:additions

o "最近的文档" 区:mru

o "竣事" 区:fileEnd

· 编辑: edit

o "开始" 区:editStart

o "取消" 区:undo.ext

o "剪切" 区:cut.ext

o "查找" 区:find.ext

o "添加" 区:add.ext

o "竣事" 区(有时不是竣事):fileEnd

o "附加" 区:additions

· 源: org.eclipse.jdt.ui.source.menu

· 重构: org.eclipse.jdt.ui.refactoring.menu

· 导航: navigate

o "开始"区:navStart

o "Go To"菜单中的"附加"组符号: goTo/additions

o "打开"区(有四个):open.ext, open.ext2, open.ext3, and open.ext4

o "显示"区(有四个):show.ext, show.ext2, show.ext3, and show.ext4

o "附加"区:additions

o "竣事"区:navEnd

· 搜索: org.eclipse.search.menu

· 项目: project

o "开始"区:projStart

o "打开"区:open.ext

o "成立"区:build.ext

o "附加"区:additions

o "竣事"区:projEnd

· 载入: launch

· 运行: org.eclipse.ui.run

· "附加"组符号:additions

· 窗口: window

o "附加"区:additions

o "竣事"区:additionsend

· 辅佐: help

o "开始"区:helpStart

o "主要组"区:group.main.ext

o "教程组"区:group.tutorials

o "东西组"区:group.tools

o "更新组"区:group.updates

o "竣事"区(有时候不是竣事): helpEnd

o "附加"区:additions

o "关于组"区:group.about.ext

假如你提供的菜单条ID不带有符号ID,那么你的菜单项将呈此刻这个菜单条的后头。假如你成立了一个新菜单条ID,你的菜单条就被添加到"项目"和"运行"菜单之间。

Eclipse开拓者提示:请让东西条和菜单条ID、符号位置保持一致性。

请留意"文件"菜单的"新建"组符号。这是我们添加本身的菜单的位置。由于它的符号ID是new.ext,所以完整的路径是:file/new.ext

#p#副标题#e#

功效

操纵荟萃中尚有其它一些特性可供利用,包罗快捷键、状态按钮、浮动图标、辅佐内容和窗体东西条等等。操纵荟萃只是记实的数十个扩展点中的一种范例的扩展。因此我们看到的只是冰山一角。可是至少它使我们领略了扩展点是如何事情的。我们看到的这些进程都是很好的。

在讲授领导自界说之前,我们看一下图3所显示的新东西条按钮和菜单项:

Eclipse插件开辟之添加简单的GUI元素

图3:新的菜单项和东西条按钮

尺度对话框

#p#分页标题#e#

Eclipse提供了所有的尺度对话框和成立自界说对话框的简朴途径。大大都尺度对话框都是由org.eclipse.jface.dialogs.MessageDialog类提供的。这个类含有许多用于成立尺度对话框的静态要领。下面表格罗列了我们可以利用的尺度对话框。

对话框范例 建设要领 与Swing中那些要领成果沟通
确认(动静、询问图标、确认和打消按钮) MessageDialog.openConfirm( Shell parent, String title, String message) ,用户点击"确认"就返回true,不然返回false。 JOptionPane.showConfirmDialog(…) passing the optionType JOptionPane.OK_CANCEL_OPTION
错误(动静、错误图标和确认按钮) MessageDialog.openError( Shell parent, String title, String message) JOptionPane.showMessageDialog(…) passing the messageType JOptionPane.ERROR_MESSAGE
提示(动静、提示图标和确认按钮) MessageDialog.openInformation( Shell parent, String title, String message) JOptionPane.showMessageDialog(…) passing the messageType JOptionPane.INFORMATION_MESSAGE
询问是否(动静、询问图标、是和否按钮) MessageDialog.openQuestion( Shell parent, String title, String question) 用户点击"是"就返回true,不然返回false。 JOptionPane.showConfirmDialog(…) passing the optionType JOptionPane.YES_NO_OPTION
告诫(动静、告诫图标、确认按钮) MessageDialog.openWarning( Shell parent, String title, String message) JOptionPane.showMessageDialog(…) passing the messageType JOptionPane.WARNING_MESSAGE

有人大概认为利用尺度对话框的时候,JOptionPane类比MessageDialog提供了更大的机动性。可是归根结底,在MessageDialog的结构函数和自界说对话框的辅佐下,你险些可以实现所有的事务。MessageDialog中缺少而JOptionPane拥有的独一的特性是在HTML中直接进动作静名目化。可是利用自界说对话框的时候是可以实现这种成果的。

对话框帮助类

此刻我们知道了可供选择的范例了,让我们来成立Invokatron需要的对话框吧。有两个处所需要对话框:

· 代码生成进程简直认信息,是否包围前面的代码。

· 输入一个值的对话框(与JOptionPane.showInputDialog()雷同)。

这个类中的第一个要领是用于确认代码包围的:

public static boolean openOverwriteDialog(Shell parent) {
 return MessageDialog.openConfirm(parent,
 "Confirmation",
 "You are about to overwrite your class. " +
 "Are you sure you want to continue?");
}

上面的代码很是简朴,我们仅仅成立了一个通例简直认对话框。输入对话框有点贫苦:MessageDialog没有输入字段。我们只能成立一个新对话框类,可以是Dialog的子类。我们也可以成立MessageDialog的子类并重载它的createCustomArea()要领,添加输入字段。可是我们尚有更简朴的要领。

我们将利用InputDialog类:

public static String openInputDialog(
 Shell parent,
 String title,
 String question,
 String initialValue) {
  InputDialog dlg = new InputDialog(
   parent,
   title,
   question,
   initialValue,
   null); //这是一个可供选择的有效的类
  dlg.open();
  if(dlg.getReturnCode()!=Window.OK) //点击"确认"了吗?
   return null;
  return dlg.getValue();
}

我们的对话框帮助类完成了。你可以在图4中看到这些对话框。

Eclipse插件开辟之添加简单的GUI元素

图4:对话框

Eclipse交响乐

Eclipse与音乐雷同;一旦你学会了如何利用那些可供利用的乐器,你就能编写本身的交响乐了。在本文中我们简短地相识了两类东西:扩展点和对话框。

    关键字:

在线提交作业