Plug-in 向导页

来源:互联网 发布:js隐藏一个button按钮 编辑:程序博客网 时间:2024/05/29 18:25

Plug-in 向导页

首先申明下,本文为笔者学习《Eclipse插件开发学习笔记》的笔记,并加入笔者自己的理解和归纳总结。

1、创建引导页

扩展点【org.eclipse.ui.newWizards】
在【org.eclipse.ui.newWizards】中添加【wizard】,在"class"中指定向导页类,继承INewWizard类。

<extensionpoint="org.eclipse.ui.newWizards"><wizardclass="com.plugin.blog.demo.wizard.DemoNewWizard"icon="icons/icon_add.png"id="com.plugin.blog.demo.wizard.DemoNewWizard"name="DemoNew"></wizard></extension>
DemoNewWizard类
public class DemoNewWizard extends Wizard implements INewWizard {private IWorkbench mWorkbench;public DemoNewWizard() {setWindowTitle("新建Demo");}@Overridepublic boolean performFinish() {return false;}@Overridepublic void init(IWorkbench workbench, IStructuredSelection selection) {mWorkbench = workbench;}}

2、打开向导页

(1) 在菜单【File】->【New】->【Other...】

(2) 可以在菜单中调用代码直接打开
DemoNewWizard wizard = new DemoNewWizard();wizard.init(mWindow.getWorkbench(), null);WizardDialog dialog = new WizardDialog(mWindow.getShell(), wizard);dialog.open();

3、向导页

向导页一般都继承WizardPage类
  • setTitle方法设置标题
  • setDescription方法设置描述信息
  • createControl方法创建界面
  • setMessage方法设置消息
  • setErrorMessage方法设置错误消息
  • setPageComplete方法表示页面是否已经设置完成
  • canFlipToNextPage方法控制向导页对话框中的Next按钮
(1) NewUserPage类,设置用户名和年龄信息。
public class NewUserPage extends WizardPage implements IWizardPage {private Text mNameText;private Combo mCategoryCombo;protected NewUserPage() {super("NewUserPage");setTitle("新建用户");setDescription("设置注意事项");}@Overridepublic void createControl(Composite parent) {Composite container = new Composite(parent, SWT.NULL);container.setLayout(new GridLayout(2, false));setControl(container);Group group = new Group(container, SWT.NONE);group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));group.setText("创建用户");GridLayout groupLayout = new GridLayout(2, false);groupLayout.marginTop = 10;groupLayout.marginLeft = 10;groupLayout.marginRight = 10;group.setLayout(groupLayout);GridData nameGd = new GridData(SWT.LEFT, SWT.CENTER, false, false);nameGd.widthHint = 40;Label nameLabel = new Label(group, SWT.NONE);nameLabel.setText("姓名:");nameLabel.setLayoutData(nameGd);mNameText = new Text(group, SWT.BORDER);mNameText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));mNameText.addModifyListener(new ModifyListener() {@Overridepublic void modifyText(ModifyEvent e) {checkButtonStatus();}});Label ageLabel = new Label(group, SWT.NONE);ageLabel.setText("类别:");ageLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));mCategoryCombo = new Combo(group, SWT.BORDER|SWT.READ_ONLY);mCategoryCombo.setItems(User.CATEGORY_ARRAY);GridData categoryGd = new GridData(SWT.LEFT, SWT.CENTER, true, false);categoryGd.widthHint = 60;mCategoryCombo.setLayoutData(categoryGd);mCategoryCombo.addSelectionListener(new SelectionAdapter() {@Overridepublic void widgetSelected(SelectionEvent e) {checkButtonStatus();}});checkButtonStatus();}private void checkButtonStatus() {if (mNameText.getText() == null || mNameText.getText().isEmpty()) {setErrorMessage("姓名不能为空");setPageComplete(false);return;}String name = mNameText.getText();for (Object obj : UserManager.getInstance().getElements()) {User user = (User)obj;if (user.getName().equals(name)) {setErrorMessage("该姓名已经存在");setPageComplete(false);return;}}if (mCategoryCombo.getText() == null || mCategoryCombo.getText().isEmpty()) {setErrorMessage("类别不能为空");setPageComplete(false);return;}setErrorMessage(null);setPageComplete(true);}public String getName() {return mNameText.getText();}public String getCategory() {return mCategoryCombo.getText();}}
显示如下

(2) UserBasicInfoPage类,设置用户基本信息
public class UserBasicInfoPage extends WizardPage implements IWizardPage {private Combo mSexComb;private Text mAgeText;protected UserBasicInfoPage() {super("UserBasicInfoPage");setTitle("用户基本信息");setDescription("用户基本信息注意事项");}@Overridepublic void createControl(Composite parent) {Composite container = new Composite(parent, SWT.NULL);final GridLayout containerLayout = new GridLayout(2, false);container.setLayout(containerLayout);setControl(container);Group group = new Group(container, SWT.NONE);group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));group.setText("用户基本信息");GridLayout groupLayout = new GridLayout(2, false);groupLayout.marginTop = 10;groupLayout.marginLeft = 10;groupLayout.marginRight = 10;group.setLayout(groupLayout);GridData sexGd = new GridData(SWT.LEFT, SWT.CENTER, false, false);sexGd.widthHint = 40;Label sexLabel = new Label(group, SWT.NONE);sexLabel.setText("性别:");sexLabel.setLayoutData(sexGd);mSexComb = new Combo(group, SWT.BORDER|SWT.READ_ONLY);mSexComb.setItems(new String[]{"男", "女"});GridData gd = new GridData(SWT.LEFT, SWT.CENTER, true, false);gd.widthHint = 60;mSexComb.setLayoutData(gd);mSexComb.addSelectionListener(new SelectionAdapter() {@Overridepublic void widgetSelected(SelectionEvent e) {checkButtonStatus();}});Label ageLabel = new Label(group, SWT.NONE);ageLabel.setText("年龄:");ageLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));mAgeText = new Text(group, SWT.BORDER);mAgeText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));mAgeText.addModifyListener(new ModifyListener() {@Overridepublic void modifyText(ModifyEvent e) {checkButtonStatus();}});checkButtonStatus();}private void checkButtonStatus() {if (mSexComb.getText() == null || mSexComb.getText().isEmpty()) {setErrorMessage("性别不能为空");setPageComplete(false);return;}if (mAgeText.getText() == null || mSexComb.getText().isEmpty()) {setErrorMessage("年龄不能为空");setPageComplete(false);return;}try {Integer.parseInt(mAgeText.getText());} catch (NumberFormatException e) {setErrorMessage("年龄格式错误");setPageComplete(false);return;}setErrorMessage(null);setPageComplete(true);}public boolean isMale() {return mSexComb.getSelectionIndex() == 0;}public int getAge() {return Integer.parseInt(mAgeText.getText());}}
显示如下

(3) UserContractInfoPage类,设置用户联系信息
public class UserContractInfoPage extends WizardPage implements IWizardPage {private Text mPhoneText;private Text mAddressText;protected UserContractInfoPage() {super("UserContractInfoPage");setTitle("用户联系信息");setDescription("用户联系信息注意事项");}@Overridepublic void createControl(Composite parent) {Composite container = new Composite(parent, SWT.NULL);container.setLayout(new GridLayout(2, false));setControl(container);Group group = new Group(container, SWT.NONE);group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));group.setText("创建用户");GridLayout groupLayout = new GridLayout(2, false);groupLayout.marginTop = 10;groupLayout.marginLeft = 10;groupLayout.marginRight = 10;group.setLayout(groupLayout);GridData phoneGd = new GridData(SWT.LEFT, SWT.CENTER, false, false);phoneGd.widthHint = 40;Label phoneLabel = new Label(group, SWT.NONE);phoneLabel.setText("手机号:");phoneLabel.setLayoutData(phoneGd);mPhoneText = new Text(group, SWT.BORDER);mPhoneText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));mPhoneText.addModifyListener(new ModifyListener() {@Overridepublic void modifyText(ModifyEvent e) {checkButtonStatus();}});Label addressLabel = new Label(group, SWT.NONE);addressLabel.setText("住址:");addressLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));mAddressText = new Text(group, SWT.BORDER);mAddressText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));mAddressText.addModifyListener(new ModifyListener() {@Overridepublic void modifyText(ModifyEvent e) {checkButtonStatus();}});checkButtonStatus();}private void checkButtonStatus() {if (mPhoneText.getText() == null || mPhoneText.getText().isEmpty()) {setErrorMessage("手机号不能为空");setPageComplete(false);return;}if (mAddressText.getText() == null || mAddressText.getText().isEmpty()) {setErrorMessage("地址不能为空");setPageComplete(false);return;}setErrorMessage(null);setPageComplete(true);}public String getPhone() {return mPhoneText.getText();}public String getAddress() {return mAddressText.getText();}}
显示如下

4、向导页对话框按钮状态

按钮状态由DemoNewWizard类控制
  • addPages方法添加向导页
  • getStartingPage方法设置首页
  • getPreviousPage方法设置当前页的前一页
  • getNextPage方法设置当前页的后一页
  • canFinish方法设置Finish按钮状态
  • performFinish方法处理Finish按钮事件
DemoNewWizard类
public class DemoNewWizard extends Wizard implements INewWizard {private IWorkbench mWorkbench;private NewUserPage mNewUserPage;private UserBasicInfoPage mBasicInfoPage;private UserContractInfoPage mContractInfoPage;public DemoNewWizard() {setWindowTitle("新建用户");}@Overridepublic void addPages() {super.addPages();mNewUserPage = new NewUserPage();addPage(mNewUserPage);mBasicInfoPage = new UserBasicInfoPage();addPage(mBasicInfoPage);mContractInfoPage = new UserContractInfoPage();addPage(mContractInfoPage);}@Overridepublic boolean canFinish() {if (getContainer().getCurrentPage() == mNewUserPage&& mNewUserPage.isPageComplete()) {return true;}return super.canFinish();}@Overridepublic boolean performFinish() {if (getContainer().getCurrentPage() == mNewUserPage) {String name = mNewUserPage.getName();String category = mNewUserPage.getCategory();saveUser(name, category);} else {String name = mNewUserPage.getName();String category = mNewUserPage.getCategory();boolean sex = mBasicInfoPage.isMale();int age = mBasicInfoPage.getAge();String phone = mContractInfoPage.getPhone();String address = mContractInfoPage.getAddress();saveUserInfo(name, category, sex, age, phone, address);}return true;}private User saveUser(String name, String category) {if (mWorkbench != null && mWorkbench.getActiveWorkbenchWindow() != null) {IWorkbenchWindow window = mWorkbench.getActiveWorkbenchWindow();try {window.getActivePage().showView("com.plugin.blog.demo.view.DemoViewPart");} catch (PartInitException e) {e.printStackTrace();}}User user = new User(name, category);UserManager.getInstance().addObject(user);return user;}private void saveUserInfo(String name, String category, boolean male,int age, String phone, String address) {User user = saveUser(name, category);UserInfoManager manager = UserInfoManager.getInstance(name);UserBasicInfo basicInfo = (UserBasicInfo) manager.getUserInfo(0);basicInfo.setMale(male);basicInfo.setAge(age);UserContractInfo contractInfo = (UserContractInfo) manager.getUserInfo(1);contractInfo.setPhone(phone);contractInfo.setAddress(address);manager.doSave(null);if (mWorkbench != null && mWorkbench.getActiveWorkbenchWindow() != null) {IWorkbenchWindow window = mWorkbench.getActiveWorkbenchWindow();try {DemoEditorInput input = new DemoEditorInput(user);window.getActivePage().openEditor(input, "com.plugin.blog.demo.edit.DemoEditorPart");} catch (PartInitException e) {e.printStackTrace();}}}@Overridepublic void init(IWorkbench workbench, IStructuredSelection selection) {mWorkbench = workbench;}}


原创粉丝点击