`
yianpuodiaotu
  • 浏览: 241559 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

wizardPage参考

阅读更多

插件向导开发最好的例子莫过于Eclipse中本身一些向导,但如何去找不易记住


一些常规界面组件,如:容器、类、项目、包等,可以参考以下类:

NewAnnotationWizardPage
NewClassWizardPage
NewContainerWizardPage
NewElementWizardPage
NewEnumWizardPage
NewInterfaceWizardPage
NewJavaProjectWizardPage
NewPackageWizardPage
NewTypeWizardPage

。。。。。。。。

这些类位于org.eclipse.jdt.ui.wizards包下,javadoc可参考 http://www.jdocs.com/eclipse/3.1/api-index.html?m=package&p=org.eclipse.core.expressions&render=classic

 

例子:

import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.ui.wizards.NewContainerWizardPage;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

import com.cownew.studio.Activator;
import com.cownew.studio.modelDev.codeGen.CodeGeneratorInfo;
import com.cownew.studio.modelDev.codeGen.CodeGeneratorLoader;
import com.cownew.studio.modelDev.codeGen.IEntityModelCodeGenerator;

public class CodeGenOptionWizardPage extends NewContainerWizardPage {
	private final String SETTINGPREFIX = CodeGenOptionWizardPage.class.getName();

	// 是否覆盖已有文件
	private final String OVERRIDEEXISTS = SETTINGPREFIX + "OVERRIDEEXISTS";

	// 上次选中的代码生成器索引
	private final String CODEGENINDEX = SETTINGPREFIX + "CODEGENINDEX";

	private Combo comboCodeGen;

	private Button btnCheckBoxOverrideExistsFile;

	private IStructuredSelection structSelect;

	private CodeGeneratorInfo[] codeGenerators;

	public CodeGenOptionWizardPage(String name, IStructuredSelection structSelect) {
		super(name);
		setTitle("code generation option");
		this.structSelect = structSelect;
	}

	public void createControl(Composite parent) {
		initializeDialogUnits(parent);

		Composite composite = new Composite(parent, SWT.NONE);
		composite.setFont(parent.getFont());
		int nColumns = 3;

		GridLayout layout = new GridLayout();
		layout.numColumns = 3;
		composite.setLayout(layout);

		Label label = new Label(composite, SWT.WRAP);
		label.setText("please select the source folder to store the code");
		GridData gd = new GridData();
		gd.widthHint = convertWidthInCharsToPixels(60);
		gd.horizontalSpan = 3;
		label.setLayoutData(gd);

		createContainerControls(composite, nColumns);
		initContainerPage(getInitialJavaElement(structSelect));

		createOptionControls(composite);

		setControl(composite);
		Dialog.applyDialogFont(composite);
	}

	private void createOptionControls(Composite composite) {
		// 得到对话框设置
		IDialogSettings settings = Activator.getDefault().getDialogSettings();

		Label lTargetORM = new Label(composite, SWT.WRAP);
		lTargetORM.setText("Target ORM:");
		GridData gdLTargetORM = new GridData();
		gdLTargetORM.horizontalSpan = 1;
		gdLTargetORM.horizontalAlignment = GridData.FILL;
		lTargetORM.setLayoutData(gdLTargetORM);

		comboCodeGen = new Combo(composite, SWT.READ_ONLY);

		// 取得所有代码生成器
		codeGenerators = CodeGeneratorLoader.loadAll();
		for (int i = 0, n = codeGenerators.length; i < n; i++) {
			CodeGeneratorInfo codeGen = codeGenerators[i];
			// 将代码生成器属性对象以代码生成器的索引为key
			// 保存到控件的用户数据区中
			comboCodeGen.setData(Integer.toString(i), codeGen);
			// 添加项
			comboCodeGen.add(codeGen.getName());
		}

		if (settings.get(CODEGENINDEX) == null) {
			// 如果“上次选中的代码生成器索引”为空,则选择第一项
			comboCodeGen.select(0);
		} else {
			// 如果“上次选中的代码生成器索引”不为空,则选择上次选中的项
			int index = settings.getInt(CODEGENINDEX);
			comboCodeGen.select(index);
		}

		GridData gdComboTargetORM = new GridData();
		gdComboTargetORM.horizontalSpan = 2;
		gdComboTargetORM.horizontalAlignment = GridData.FILL;
		comboCodeGen.setLayoutData(gdComboTargetORM);

		btnCheckBoxOverrideExistsFile = new Button(composite, SWT.CHECK);
		btnCheckBoxOverrideExistsFile.setText("override existing file");
		btnCheckBoxOverrideExistsFile.setSelection(true);
		// 如果“是否覆盖已有文件”不为空,则将“是否覆盖已有文件”
		// 选择框设置为和上次一样的设置
		if (settings.get(OVERRIDEEXISTS) != null) {
			boolean overwrite = settings.getBoolean(OVERRIDEEXISTS);
			btnCheckBoxOverrideExistsFile.setSelection(overwrite);
		}
		GridData gdOverrideExists = new GridData();
		gdOverrideExists.horizontalSpan = 3;
		gdOverrideExists.horizontalAlignment = GridData.FILL;
		btnCheckBoxOverrideExistsFile.setLayoutData(gdOverrideExists);

	}

	protected IStatus containerChanged() {
		IStatus status = super.containerChanged();
		updateStatus(status);
		return status;
	}

	/**
	 * 得到用户选择的代码生成器的实例
	 * 
	 * @return
	 */
	public IEntityModelCodeGenerator getCodeGenerator() {
		CodeGeneratorInfo gen = codeGenerators[comboCodeGen.getSelectionIndex()];
		String className = gen.getClassName();
		try {
			Class clz = Class.forName(className);
			return (IEntityModelCodeGenerator) clz.newInstance();
		} catch (ClassNotFoundException e) {
			Activator.logException(e);
		} catch (InstantiationException e) {
			Activator.logException(e);
		} catch (IllegalAccessException e) {
			Activator.logException(e);
		}
		return null;
	}

	public boolean isOverrideExistsFile() {
		return btnCheckBoxOverrideExistsFile.getSelection();
	}

	/**
	 * 保存用户本次的设置
	 */
	public void saveConfig() {
		IDialogSettings settings = Activator.getDefault().getDialogSettings();
		settings.put(OVERRIDEEXISTS, isOverrideExistsFile());
		settings.put(CODEGENINDEX, comboCodeGen.getSelectionIndex());
	}

}

 

 

 

  • 大小: 59.6 KB
分享到:
评论

相关推荐

    eclipse 中自定义向导(wizard)的实现

    自定义向导(wizard)是通过 org.eclipse.ui.ide.wizard 和 org.eclipse.ui.ide.wizardpage 接口来实现的。每个向导页面都描述了一步任务,向导页面被添加到向导中,页面的状态决定了该页面是否已经完成。当该页面...

    SWT(JFace) Wizard(Eclipse插件编程必备)

    在 `CustomerInfoPage` 类中,创建了四个 `Text` 控件,分别用于输入这些信息,并且定义了 `createControl(Composite parent)` 方法,此方法是 WizardPage 必须实现的,用于在 Wizard 对话框中构建页面的UI。...

    QT 使用向导对话框

    这里没有实际应用,但可以作为参考。 #### 注册字段 ```cpp // page-&gt;registField(QString(field), QLineEdit*, Qt::DisplayRole); // page-&gt;setField(QString(field), QVariant()); ``` 虽然这些代码片段被注释掉...

    react-simple-wizard:一个简单的分步向导组件

    React简单向导 一个简单的分步向导组件。 用法 具有两个公共方法来导航步骤的父组件: WizardRef.next() // goes to the next step WizardRef.jump(step) // jumps to the desired step 将您的导航组件作为此...

    Eclipse代码生成器插件开发

    在上面的代码中,我们实现了一个名为 NewCodeGenWizardPage 的 Wizard 页面,该页面继承自 WizardPage 类。 七、总结 在本节中,我们探讨了Eclipse代码生成器插件开发的相关知识点,包括插件开发基本概念、Wizard...

    向导WizardDialog和TitleAreaDialog简单示例

    在Java编程领域,`WizardDialog` 和 `TitleAreaDialog` 是两种常见的对话框类,...如果你遇到任何问题或需要进一步的解释,请查阅SWT的官方文档,或者参考在线社区如ITEYE上的博客和讨论,那里通常有丰富的资源和解答。

    Eclipse Form开发实例代码

    7. **对话框和页**:除了基本的组件外,Eclipse SWT还提供了如`MessageDialog`、`InputDialog`等对话框以及`WizardPage`等高级组件,用于创建更复杂的功能,如文件选择、用户输入验证等。 8. **插件开发**:在...

    Eclipse向导入门

    这些类将实现`INewWizard`接口,扩展`WizardPage`类,并覆盖必要的方法。\n\n**Wizard类与INewWizard接口**\n\n在新创建的插件项目中,会生成几个类,如`NewXHTMLFileWizard`、`NewXHTMLFileWizardPage`和`Activator...

    Eclipse 向导设计模式

    它通过一系列的`WizardPage`组件来构建整个向导流程,每个页面都负责展示一部分用户界面,并处理相应的业务逻辑。 ##### 2.1 JFaceWizard原理 - **数据模型**:JFaceWizard中每个页面都可以包含自己的数据模型,但...

    SWT/JFACE in Action

    - **WizardPage**: WizardPage是构成向导的基本单元,每个页面可以包含不同的控件和逻辑。 #### 12. 高级特性 - **数据绑定**: JFace支持数据模型与UI元素之间的自动绑定,减少了大量手动同步代码的编写。 - **...

    qt 界面跳转 界面跳转 界面跳转

    每个页面都是一个WizardPage,用户按照步骤逐个完成。每个页面可以通过nextId()方法定义下一步的页面ID,QWizard会自动处理页面间的跳转逻辑: ```cpp QWizard *wizard = new QWizard(); QWizardPage *page1 = new ...

    Proc.zip_菜单_Visual_C++_

    2. WizardPage.cpp 和 WizardPage.h:定义属性页或向导页面的类。 3. Resource.h:资源定义文件,用于菜单和其他GUI元素。 4..rc 文件:资源脚本文件,包含菜单、对话框等资源定义。 5. MainFrm.cpp/h 和 DlgMain....

    qt前后端交互,界面的跳转

    每个步骤对应一个WizardPage,用户按顺序完成所有步骤。 3. **QDialog和QMainWindow**:QDialog通常用于弹出对话框,而QMainWindow是主窗口的基础类,两者结合可以实现不同界面间的跳转。 4. **QQuickView和QML**...

    JFace的源码,从官网下的

    - `wizard`:封装了向导的实现,包括Wizard、WizardDialog和各个特定类型的WizardPage。 虽然描述中提到源码里有部分在Eclipse环境中可能报错,但这通常是因为依赖问题或版本不匹配。开发者可以忽略这些错误,专注...

    Qt多界面跳转解决方案

    QWizard提供了一种分步的界面布局,每一步都是一个WizardPage。用户只能按顺序前进或后退,直到完成所有步骤。 在实际项目中,可能需要结合以上多种方法,根据应用的具体需求灵活运用。同时,为了保持主窗口的稳定...

    Eclipse首选项开发

    此外,`PreferencePage`类用于表示首选项中的一个页面,类似于向导式对话框中的单个步骤(WizardPage)。`PreferenceNode`代表了首选项界面中的一个节点,它可以链接到一个`PreferencePage`。而`PreferenceManager`...

    eclipse插件开发-铺设一条插件开发普及之路(1-5章).pdf

    - **WizardPage**:介绍如何设计和实现每个向导页面,包括数据验证和逻辑控制。 - **扩展点**:说明如何通过扩展点注册自定义的向导,例如新建文件向导、导入/导出向导等。 ##### 二、内置对话框 - **消息框**:...

    eclipse 3.6 rcp 开发

    - 实现addPages()方法以添加WizardPage。 #### 9. 首选项 - **概述**: 首选项用于存储用户的个性化设置。 - **使用首选项**: - 获取PreferenceStore实例。 - 通过set/get方法存储/获取偏好值。 - 实现...

Global site tag (gtag.js) - Google Analytics