EMF介绍系列(五、定制应用程序界面)2011-04-30 博客园 bjzhanghao第三篇帖子介绍了定制一个EMF应用程序的基本方法,这一篇让我们来看看怎样定制应用 程序的使用界面。没有任何一个界面是万能的,所以定制工作不可避免,而大多数定制都是 通过修改代码来实现的。在实际应用中,同一个需求可能有多种修改方式可以实现,我认为 修改涉及的地方(类,方法)越少越有利于发挥EMF的优势,因此我们应该对EMF生成的代码 有一定的了解,这是发挥自己创造力的基础。下面有几个常见的需求,通过对这些需求的实现,相信你会对EMF应用程序的开发过程有 一个更具体的认识。一、简化模型创建向导EMF帮我们生成的模型创建向导(菜单File->New->Other->Shop Model)分为两 步,第一步要用户输入文件名,对于商店的例子文件名是*.shop格式;第二步用户要选择以 哪个对象作为根节点,同时要指定XML文件的编码方式,商店例子里显然要以商店对象为根节 点,所以其实第二步可以省去,以免造成使用者的困扰。生成的向导类是ShopModelWizard,比起增加一个步骤来,去掉一个步骤要简单得多。首 先找到addPages()方法,把最后四句关于initialObjectCreationPage最的语句都注释掉;
/**
* The framework calls this to create the contents of the wizard.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public void addPages() {
//initialObjectCreationPage = new ShopModelWizardInitialObjectCreationPage("Whatever2");
//initialObjectCreationPage.setTitle(ShopEditorPlugin.INSTANCE.getString ("_UI_ShopModelWizard_label"));
//initialObjectCreationPage.setDescription (ShopEditorPlugin.INSTANCE.getString ("_UI_Wizard_initial_object_description"));
//addPage(initialObjectCreationPage);
}现在因为没有了这个向导页,原来由它提供的信息我们要改为在程序里提供,所以要修改 另外两个方法:第一,createInitialModel()方法本来是建立一个用户选择的对象作为根节 点的模型,我们把它改为直接建立一个Shop对象;
protected EObject createInitialModel() {
// EClass eClass = (EClass)shopPackage.getEClassifier (initialObjectCreationPage.getInitialObjectName());
// EObject rootObject = shopFactory.create(eClass);
EObject rootObject=shopFactory.createShop();
return rootObject;
}第二,在performFinish()方法里设置文件编码的地方,改为使用UTF-8编码,当 然你也可以规定使用其他编码,只是用户不能选择了:
public boolean performFinish() {
options.put(XMLResource.OPTION_ENCODING, "UTF- 8"/*initialObjectCreationPage.getEncoding()*/);
}因此,这个类里我们总共修改了三个方法,一定记得要把每个方法前的@generated标记删 除或修改。现在,用户只要简单的指定文件名后就可以Finish了,如图1所示。

图1 向导的最后一页