编程资料集中营
 | 网站首页 | 文章中心 | 编程资料2 | 软件下载 | BT下载 | 八卦星闻 | 音乐在线 | 在线游戏 | 免费电影 | 进入问吧 | 
Eclipse插件开发之定制向导, 以前我有一个微型的便携式电子地址薄。我一直认为它很不错,直到有一天它停止运行了。销售该产品的人员无法找回我的联系地址名册,却提议更换一台。这时候我才知道数据的重要性。这个闪亮的小发明与存储在它里面的数据相比根本就不值一提。在这个序列文章的第一部分中,我介绍了Eclipse插件的开发环境,并开发了一个简单的插件(见天极网《Eclipse插件开发快速入,
您现在的位置: 编程资料,学习资料,c,c++,vc,vc++,java,jsp,j2ee,j2me,asp,php >> 文章中心 >> JAVA 专区 >> JAVA 技术 >> 文章正文
【字体:
Eclipse插件开发之定制向导   进入问吧

本站地址:http://www.bajiao123.com

作者:admin    文章来源:不详    点击数:    更新时间:2007-3-20    

Eclipse插件开发之定制向导

>}
}
  向导可以捕获CoreException异常,接着可以把它所包含的Status对象显示给用户看。向导不会被关闭。
编写新的向导页面的代码

  下一步,我们编写InvokatronWizardPage2。它的整个类都是全新的:

public class InvokatronWizardPage2 extends WizardPage {
 private Text packageText;
 private Text superclassText;
 private Text interfacesText;

 private ISelection selection;

 public InvokatronWizardPage2(ISelection selection) {
  super("wizardPage2");
  setTitle("Invokatron Wizard");
  setDescription("This wizard creates a new"+" file with *.invokatron extension.");
  this.selection = selection;
 }

 private void updateStatus(String message) {
  setErrorMessage(message);
  setPageComplete(message == null);
 }

 public String getPackage() {
  return packageText.getText();
 }
 public String getSuperclass() {
  return superclassText.getText();
 }
 public String getInterfaces() {
  return interfacesText.getText();
 }
  上面的构造函数设置了页面的标题(在标题栏下方高亮度显示)和描述(在页面标题的下方显示)。我们还有一些辅助方法。 updateStatus处理页面特定的错误信息的显示。如果没有错误信息,就意味着页面完成了;因此,"下一步"按钮就可以使用了。还有数据字段内容的getter(获取)方法。下面是createControl()方法,它建立了页面的所有可视化组件:

public void createControl(Composite parent) {
 Composite controls =new Composite(parent, SWT.NULL);
 GridLayout layout = new GridLayout();
 controls.setLayout(layout);
 layout.numColumns = 3;
 layout.verticalSpacing = 9;

 Label label =new Label(controls, SWT.NULL);
 label.setText("&Package:");

 packageText = new Text(controls,SWT.BORDER | SWT.SINGLE);
 GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 packageText.setLayoutData(gd);
 packageText.addModifyListener(
  new ModifyListener() {
   public void modifyText(ModifyEvent e) {
    dialogChanged();
   }
  });

 label = new Label(controls, SWT.NULL);
 label.setText("Blank = default package");

 label = new Label(controls, SWT.NULL);
 label.setText("&Superclass:");

 superclassText = new Text(controls,SWT.BORDER | SWT.SINGLE);
 gd = new GridData(GridData.FILL_HORIZONTAL);
 superclassText.setLayoutData(gd);
 superclassText.addModifyListener(new ModifyListener() {
  public void modifyText(ModifyEvent e) {
   dialogChanged();
  }
 });

 label = new Label(controls, SWT.NULL);
 label.setText("Blank = Object");

 label = new Label(controls, SWT.NULL);
 label.setText("&Interfaces:");

 interfacesText = new Text(controls,SWT.BORDER | SWT.SINGLE);
 gd = new GridData(GridData.FILL_HORIZONTAL);
 interfacesText.setLayoutData(gd);
 interfacesText.addModifyListener(
  new ModifyListener() {
   public void modifyText(ModifyEvent e) {
    dialogChanged();
   }
  });

 label = new Label(controls, SWT.NULL);
 label.setText("Separated by ','");

 dialogChanged();
 setControl(controls);
}
  为了编写这段代码,你必须了解SWT(请你自己查看一些这方面的资料)。基本上,这个方法建立了标签和字段,并把它们放置到网格布局上。字段发生改变的时候,就调用dialogChanged()来验证它的数据:

private void dialogChanged() {
 String aPackage = getPackage();
 String aSuperclass = getSuperclass();
 String interfaces = getInterfaces();

 String status = new PackageValidator().isValid(aPackage);
 if(status != null) {updateStatus(status);
  return;
 }

 status = new SuperclassValidator().isValid(aSuperclass);
 if(status != null) {updateStatus(status);
  return;
}

status = new InterfacesValidator().isValid(interfaces);
if(status != null) {updateStatus(status);
 return;
}

updateStatus(null);
}

}
  这个工作是在三个工具类--PackageValidator、SuperclassValidator和 InterfacesValidator的帮助下完成的。接下来我们编写这些类。
验证类

  验证可以在插件的用户输入数据的任何部分中进行。因此,把验证代码放入可重复使用的类中是有意义的,这样就不用把它复制到多个位置。下面是一个验证类的例子。

public class InterfacesValidator implements ICellEditorValidator
{
 public String isValid(Object value)
 {
  if( !( value instanceof String) )
   return null;

  String interfaces = ((String)value).trim();
  if( interfaces.equals(""))
   return null;

  String[] interfaceArray = interfaces.split(",");
  for (int i = 0; i < interfaceArray.length; i++)
  {
   IStatus status = JavaConventions.validateJavaTypeName(interfaceArray[i]);
   if (status.getCode() != IStatus.OK)
    return "Validation of interface " + interfaceArray[i] + ": " + status.getMessage();
  }
  return null;
 }
}
  其它的验证类与它非常类似。

  Eclipse类库中的另外一个极好的类是JavaConventions,它为我们验证数据!它包含了很多验证方法,例如:

  · validateJavaTypeName() 检查类和接口的名称。

  · validatePackageName() 检查程序包的名称。

  · validateFieldName() 检查数据成员的名称。

  · validateMethodName() 检查方法的名称。

  · validateIdentifierName() 检查变量的名称。

  现在我们不需要ICellEditorValidator接口,但是在以后的文章中,我们是需要它的。

  结果

  到目前为止,我们拥有了一个可以工作的向导,它拥有一张图片和两个页面,第二个页面建立了原来的Invokatron文档。图2显示了结果:


图2:定制的向导
  闪亮的发明

  我们可以看到,通常是数据驱动应用程序的。外表(Presentation)也是很重要的。丑陋的发明难以出售,但是闪亮的发明可能容易出售。但是数据是我们这些程序员实现的非常本质的东西。

  在本文中,我们首先决定了自己将处理的数据。然后,我们以定制向导的方式来获取这些数据。下一篇文章将继续讲解显示的问题,包括定制的编辑器和属性页面。

上一页  [1] [2] 

   

进入问吧

本站地址:http://www.bajiao123.com

文章录入:admin    责任编辑:admin 
高级搜索
编程资料集中营