`
chenweionline
  • 浏览: 21895 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用文件模板和向导创建一个类型文件

阅读更多

通过工具创建类型文件时通常会使用到各式各样的模板,例如IDE在创建java文件时会自动在文件头添加作者和创建日期的注释、XML文件会自动添加根元素的标签等。在NetBeans里通过使用文件模板可以很方便的按照既定的模式创建你的类型文件。

我在《创建新的文件类型 》里介绍了怎样创建一个自定义的文件类型,创建后的文件类型里就包含了一个名为MapTemplate.xmap的空文件模板。现在我们将它变成一个真正有用的地图文件模板,并且使用向导收集初始参数创建地图文件。

创建模块项目

现在创建一个模块套件项目Florence 和一个模块项目MapCoreUI ,将前文中创建的MapCore 模块项目和MapCoreUI 一起加入Florence 。从命名就可以看出,我们的新建文件向导会在MapCoreUI 中实现。

创建文件模板

打开我们之前创建的MapCore 项目,在包org.jqueen.nb.map.core 下可以找到一个名为MapTemplate.xmap 的空文件模板,双击打开后我们给它添加内容使其变成一个真正有用的地图文件模板:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" author="${user}">
    
<summary>
        
<attr name="width" intvalue="${mapWidth}" />
        
<attr name="height" intvalue="${mapHeight}" />
    
</summary>
    
<resource size="1">
        
<iconresource>
            
<attr name="ID" intvalue="0" />
            
<attr name="URL" stringvalue="${iconresourceURL}" />
        
</iconresource>
    
</resource>
    
<layers size="${layerSize}">
        
<layer type="TileLayer">
            
<attr name="name" stringvalue="tile" />
            
<attr name="depth" intvalue="0" />
            
<attr name="tileRows" intvalue="${tileRows}" />
            
<attr name="tileCols" intvalue="${tileCols}" />
            
<attr name="tileWidth" intvalue="${tileWidth}" />
            
<attr name="tileHeight" intvalue="${tileHeight}" />
${tiles}
        
</layer>
${thingLayers}
    
</layers>
</map>

 

添加完成后把这个文件复制到MapCoreUI 项目的org/jqueen/nb/map/core/ui 目录下。

创建新建文件向导

1、打开项目MapCoreUI ,点击新建文件菜单,在类别列表中选择“模块开发”,文件类型列表中选择“向导”,点击“下一步”操作。


2、注册类型选择“新建文件”,再在向导面板数输入框输入“2”,点击“下一步”操作。


3、类名前缀输入框输入“CreateMap”,
显示名称输入“Map File”,
类别选择“其他”,
包输入框输入“org.jqueen.nb.map.core.ui.wizard”,最后点击“完成”结束操作。



这时,我们可以看到,IDE自动为我们在项目文件夹里新建了许多文件,我们打开2个组件面板文件设计向导的界面:

CreateMapVisualPanel1.java


CreateMapVisualPanel2.java



下面分别是两个类的全部源码:


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package org.jqueen.nb.map.core.ui.wizard;

import javax.swing.JPanel;
import org.openide.loaders.DataFolder;
import org.openide.util.Utilities;

/** * * @author Leon Chen */
public final class CreateMapVisualPanel1 extends JPanel {

    
public static final String FILE_NAME = "fileName";

    
/** Creates new form
    CreateMapVisualPanel1 
*/
    
public CreateMapVisualPanel1() {
        initComponents();
    }

    @Override
    
public String getName() {
        
return "名称设置";
    }

    
/** This method is called from within the constructor to * initialize
    the form. * WARNING: Do NOT modify this code. The content of this
    method is * always regenerated by the Form Editor. 
*/
    
// <editor-fold defaultstate="collapsed" desc  = "Generated Code" >
    private void initComponents() {
        labName 
= new javax.swing.JLabel();
        labFiles 
= new javax.swing.JLabel();
        txtName 
= new javax.swing.JTextField();
        labMapFile 
= new javax.swing.JLabel();
        labBlockFile 
= new javax.swing.JLabel();
        org.openide.awt.Mnemonics.setLocalizedText(labName,
                org.openide.util.NbBundle.getMessage(CreateMapVisualPanel1.
class,
                
"CreateMapVisualPanel1.labName.text")); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(labFiles,
                org.openide.util.NbBundle.getMessage(CreateMapVisualPanel1.
class,
                
"CreateMapVisualPanel1.labFiles.text")); // NOI18N
        txtName.setText(org.openide.util.NbBundle.getMessage(CreateMapVisualPanel1.class,
                
"CreateMapVisualPanel1.txtName.text")); // NOI18N
        txtName.addKeyListener(new java.awt.event.KeyAdapter() {

            
public void keyReleased(java.awt.event.KeyEvent evt) {
                txtNameKeyReleased(evt);
            }
        });
        org.openide.awt.Mnemonics.setLocalizedText(labMapFile,
                org.openide.util.NbBundle.getMessage(CreateMapVisualPanel1.
class,
                
"CreateMapVisualPanel1.labMapFile.text")); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(labBlockFile,
                org.openide.util.NbBundle.getMessage(CreateMapVisualPanel1.
class,
                
"CreateMapVisualPanel1.labBlockFile.text")); // NOI18N
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        
this.setLayout(layout);
        layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(labMapFile, javax.swing.GroupLayout.DEFAULT_SIZE, 
380,
                Short.MAX_VALUE).addGroup(layout.createSequentialGroup().addComponent(labName).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(txtName, javax.swing.GroupLayout.DEFAULT_SIZE, 
316,
                Short.MAX_VALUE)).addComponent(labFiles).addComponent(labBlockFile,
                javax.swing.GroupLayout.DEFAULT_SIZE, 
380, Short.MAX_VALUE)).addContainerGap()));
        layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(labName).addComponent(txtName,
                javax.swing.GroupLayout.PREFERRED_SIZE,
                javax.swing.GroupLayout.DEFAULT_SIZE,
                javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(
919191).addComponent(labFiles).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(labMapFile).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(labBlockFile).addContainerGap(151, Short.MAX_VALUE)));
    }
// </editor-fold> private void

    txtNameKeyReleased(java.awt.event.KeyEvent evt) {
        String path 
= "";
        DataFolder dataFolder 
= Utilities.actionsGlobalContext().lookup(DataFolder.class);
        
if (dataFolder != null) {
            path 
= dataFolder.getPrimaryFile().getPath();
        }
        String name 
= txtName.getText().trim();
        labMapFile.setText(path 
+ "/" + name + ".map");
        labBlockFile.setText(path 
+ "/" + name + ".block");
    }
    
// Variables declaration - do not modify
    private javax.swing.JLabel labBlockFile;
    
private javax.swing.JLabel labFiles;
    
private javax.swing.JLabel labMapFile;
    
private javax.swing.JLabel labName;
    
private javax.swing.JTextField txtName;
    
// End of variables declaration

    
public String getFileName() {
        
return txtName.getText().trim();
    }
}


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package org.jqueen.nb.map.core.ui.wizard;

import javax.swing.JPanel;

/** * * @author Leon Chen */
public final class CreateMapVisualPanel2 extends JPanel {

    
public static final String MAP_WIDTH = "mapWidth";
    
public static final String MAP_HEIGHT = "mapHeight";
    
public static final String THING_LAYER_SIZE = "thingLayerSize";
    
public static final String TILE_WIDTH = "tileWidth";
    
public static final String TILE_HEIGHT = "tileHeight";
    
public static final String ICON_URL = "iconURL";

    
/** Creates new form
    CreateMapVisualPanel2 
*/
    
public CreateMapVisualPanel2() {
        initComponents();
    }

    @Override
    
public String getName() {
        
return "参数设置";
    }

    
/** This method is called from within the constructor to * initialize
    the form. * WARNING: Do NOT modify this code. The content of this
    method is * always regenerated by the Form Editor. 
*/
    
// <editor-fold defaultstate="collapsed" desc  = "Generated Code" >
    private void initComponents() {
        labMapWidth 
= new javax.swing.JLabel();
        jSpinner1 
= new javax.swing.JSpinner();
        labMapHeight 
= new javax.swing.JLabel();
        jSpinner2 
= new javax.swing.JSpinner();
        labThingLayerSize 
= new javax.swing.JLabel();
        jSpinner3 
= new javax.swing.JSpinner();
        labTileWidth 
= new javax.swing.JLabel();
        jSpinner4 
= new javax.swing.JSpinner();
        labTileHeight 
= new javax.swing.JLabel();
        jSpinner5 
= new javax.swing.JSpinner();
        labTileResource 
= new javax.swing.JLabel();
        txtIcon 
= new javax.swing.JTextField();
        btnOpen 
= new javax.swing.JButton();
        org.openide.awt.Mnemonics.setLocalizedText(labMapWidth,
                org.openide.util.NbBundle.getMessage(CreateMapVisualPanel2.
class,
                
"CreateMapVisualPanel2.labMapWidth.text")); // NOI18N
        jSpinner1.setModel(new javax.swing.SpinnerNumberModel(96009999,
                
64));
        org.openide.awt.Mnemonics.setLocalizedText(labMapHeight,
                org.openide.util.NbBundle.getMessage(CreateMapVisualPanel2.
class,
                
"CreateMapVisualPanel2.labMapHeight.text")); // NOI18N
        jSpinner2.setModel(new javax.swing.SpinnerNumberModel(64009999,
                
64));
        org.openide.awt.Mnemonics.setLocalizedText(labThingLayerSize,
                org.openide.util.NbBundle.getMessage(CreateMapVisualPanel2.
class,
                
"CreateMapVisualPanel2.labThingLayerSize.text")); // NOI18N
        jSpinner3.setModel(new javax.swing.SpinnerNumberModel(31101));
        org.openide.awt.Mnemonics.setLocalizedText(labTileWidth,
                org.openide.util.NbBundle.getMessage(CreateMapVisualPanel2.
class,
                
"CreateMapVisualPanel2.labTileWidth.text")); // NOI18N
        jSpinner4.setModel(new javax.swing.SpinnerNumberModel(64649999,
                
64));
        org.openide.awt.Mnemonics.setLocalizedText(labTileHeight,
                org.openide.util.NbBundle.getMessage(CreateMapVisualPanel2.
class,
                
"CreateMapVisualPanel2.labTileHeight.text")); // NOI18N
        jSpinner5.setModel(new javax.swing.SpinnerNumberModel(64649999,
                
64));
        org.openide.awt.Mnemonics.setLocalizedText(labTileResource,
                org.openide.util.NbBundle.getMessage(CreateMapVisualPanel2.
class,
                
"CreateMapVisualPanel2.labTileResource.text")); // NOI18N
        txtIcon.setEditable(false);
        txtIcon.setText(org.openide.util.NbBundle.getMessage(CreateMapVisualPanel2.
class,
                
"CreateMapVisualPanel2.txtIcon.text")); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(btnOpen,
                org.openide.util.NbBundle.getMessage(CreateMapVisualPanel2.
class,
                
"CreateMapVisualPanel2.btnOpen.text")); // NOI18N
        btnOpen.addActionListener(new java.awt.event.ActionListener() {

            
public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnOpenActionPerformed(evt);
            }
        });
        javax.swing.GroupLayout layout 
= new javax.swing.GroupLayout(this);
        
this.setLayout(layout);
        layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(labMapWidth).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE,
                javax.swing.GroupLayout.DEFAULT_SIZE,
                javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(layout.createSequentialGroup().addComponent(labMapHeight).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jSpinner2, javax.swing.GroupLayout.PREFERRED_SIZE,
                javax.swing.GroupLayout.DEFAULT_SIZE,
                javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(layout.createSequentialGroup().addComponent(labThingLayerSize).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jSpinner3, javax.swing.GroupLayout.PREFERRED_SIZE,
                javax.swing.GroupLayout.DEFAULT_SIZE,
                javax.swing.GroupLayout.PREFERRED_SIZE))).addGap(
255255255)).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(labTileWidth).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jSpinner4, javax.swing.GroupLayout.PREFERRED_SIZE,
                javax.swing.GroupLayout.DEFAULT_SIZE,
                javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(layout.createSequentialGroup().addComponent(labTileHeight).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jSpinner5, javax.swing.GroupLayout.PREFERRED_SIZE,
                javax.swing.GroupLayout.DEFAULT_SIZE,
                javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(layout.createSequentialGroup().addComponent(labTileResource).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(txtIcon, javax.swing.GroupLayout.DEFAULT_SIZE, 
235,
                Short.MAX_VALUE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(btnOpen))).addContainerGap()))));
        layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(labMapWidth).addComponent(jSpinner1,
                javax.swing.GroupLayout.PREFERRED_SIZE,
                javax.swing.GroupLayout.DEFAULT_SIZE,
                javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(labMapHeight).addComponent(jSpinner2,
                javax.swing.GroupLayout.PREFERRED_SIZE,
                javax.swing.GroupLayout.DEFAULT_SIZE,
                javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(
181818).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(labThingLayerSize).addComponent(jSpinner3,
                javax.swing.GroupLayout.PREFERRED_SIZE,
                javax.swing.GroupLayout.DEFAULT_SIZE,
                javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(
181818).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(labTileWidth).addComponent(jSpinner4,
                javax.swing.GroupLayout.PREFERRED_SIZE,
                javax.swing.GroupLayout.DEFAULT_SIZE,
                javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(labTileHeight).addComponent(jSpinner5,
                javax.swing.GroupLayout.PREFERRED_SIZE,
                javax.swing.GroupLayout.DEFAULT_SIZE,
                javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(labTileResource).addComponent(txtIcon,
                javax.swing.GroupLayout.PREFERRED_SIZE,
                javax.swing.GroupLayout.DEFAULT_SIZE,
                javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(btnOpen)).addContainerGap(
103, Short.MAX_VALUE)));
    }
// </editor-fold>

    
private void btnOpenActionPerformed(java.awt.event.ActionEvent evt) {
    }
    
// Variables declaration - do not modify 
    private javax.swing.JButton btnOpen;
    
private javax.swing.JSpinner jSpinner1;
    
private javax.swing.JSpinner jSpinner2;
    
private javax.swing.JSpinner jSpinner3;
    
private javax.swing.JSpinner jSpinner4;
    
private javax.swing.JSpinner jSpinner5;
    
private javax.swing.JLabel labMapHeight;
    
private javax.swing.JLabel labMapWidth;
    
private javax.swing.JLabel labThingLayerSize;
    
private javax.swing.JLabel labTileHeight;
    
private javax.swing.JLabel labTileResource;
    
private javax.swing.JLabel labTileWidth;
    
private javax.swing.JTextField txtIcon;
    
// End of variables declaration

    
public int getMapWidth() {
        
return (Integer) jSpinner1.getValue();
    }

    
public int getMapHeight() {
        
return (Integer) jSpinner2.getValue();
    }

    
public int getThingLayerSize() {
        
return (Integer) jSpinner3.getValue();
    }

    
public int getTileWidth() {
        
return (Integer) jSpinner4.getValue();
    }

    
public int getTileHeight() {
        
return (Integer) jSpinner5.getValue();
    }

    
public String getIconURL() {
        
return txtIcon.getText();
    }
}

 
Ok,现在我们可以给组件关联的另外2个类添加获取输入参数的代码了。
打开文件CreateMapWizardPanel1.java ,新增一个方法:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->    private String getFileName() {
        
return ((CreateMapVisualPanel1) getComponent()).getFileName();
    }


然后在storeSettings() 方法里添加代码:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->((WizardDescriptor) settings).putProperty(CreateMapVisualPanel1.FILE_NAME, getFileName());
((TemplateWizard) settings).setTargetName(getFileName());


打开文件CreateMapWizardPanel2.java ,新增一组方法:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->    private int getMapWidth(){
        
return ((CreateMapVisualPanel2) getComponent()).getMapWidth();
    }
    
private int getMapHeight(){
        
return ((CreateMapVisualPanel2) getComponent()).getMapHeight();
    }
    
private int getThingLayerSize(){
        
return ((CreateMapVisualPanel2) getComponent()).getThingLayerSize();
    }
    
private int getTileWidth(){
        
return ((CreateMapVisualPanel2) getComponent()).getTileWidth();
    }
    
private int getTileHeight(){
        
return ((CreateMapVisualPanel2) getComponent()).getTileHeight();
    }
    
private String getIconURL(){
        
return ((CreateMapVisualPanel2) getComponent()).getIconURL();
    }


然后在storeSettings() 方法里添加代码:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->    ((WizardDescriptor) settings).putProperty(CreateMapVisualPanel2.MAP_WIDTH, getMapWidth());
    ((WizardDescriptor) settings).putProperty(CreateMapVisualPanel2.MAP_HEIGHT, getMapHeight());
    ((WizardDescriptor) settings).putProperty(CreateMapVisualPanel2.THING_LAYER_SIZE, getThingLayerSize());
    ((WizardDescriptor) settings).putProperty(CreateMapVisualPanel2.TILE_WIDTH, getTileWidth());
    ((WizardDescriptor) settings).putProperty(CreateMapVisualPanel2.TILE_HEIGHT, getTileHeight());
    ((WizardDescriptor) settings).putProperty(CreateMapVisualPanel2.ICON_URL, getIconURL());

 
现在再重写CreateMapWizardIterator.javainstantiate() 方法:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->    FileObject dir = Templates.getTargetFolder(wizard);
    String targetName 
= Templates.getTargetName(wizard);
    DataFolder df 
= DataFolder.findFolder(dir);
    Integer mapWidth 
= (Integer) wizard.getProperty(CreateMapVisualPanel2.MAP_WIDTH);
    Integer mapHeight 
= (Integer) wizard.getProperty(CreateMapVisualPanel2.MAP_HEIGHT);
    String url 
= (String) wizard.getProperty(CreateMapVisualPanel2.ICON_URL);
    Integer thingLayerSize 
= (Integer) wizard.getProperty(CreateMapVisualPanel2.THING_LAYER_SIZE);
    Integer tileWidth 
= (Integer) wizard.getProperty(CreateMapVisualPanel2.TILE_WIDTH);
    Integer tileHeight 
= (Integer) wizard.getProperty(CreateMapVisualPanel2.TILE_HEIGHT);
    Integer tileRows 
= mapWidth / tileWidth;
    
if (mapWidth % tileWidth != 0) {
        tileRows
++;
    }
    Integer tileCols 
= mapHeight / tileHeight;
    
if (mapHeight % tileHeight != 0) {
        tileCols
++;
    }
    HashMap hashMap 
= new HashMap();
    hashMap.put(
"mapWidth", mapWidth);
    hashMap.put(
"mapHeight", mapHeight);
    hashMap.put(
"iconresourceURL", url == null ? "" : url);
    hashMap.put(
"layerSize", thingLayerSize + 1);
    hashMap.put(
"tileRows", tileRows);
    hashMap.put(
"tileCols", tileCols);
    hashMap.put(
"tileWidth", tileWidth);
    hashMap.put(
"tileHeight", tileHeight);
    hashMap.put(
"tiles", getTileScript(tileRows, tileCols));
    hashMap.put(
"thingLayers", getThingLayerScript(thingLayerSize));
    FileObject template 
= Templates.getTemplate(wizard);
    DataObject dTemplate 
= DataObject.find(template);
    DataObject dobj 
= dTemplate.createFromTemplate(df, targetName, hashMap);
    FileObject createdFile 
= dobj.getPrimaryFile();
    
return Collections.singleton(createdFile);

我们再为这个类添加2个补充模板脚本的方法:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->    private String getTileScript(<s
分享到:
评论

相关推荐

    VC++创建自定义向导程序

    例如,如果你经常需要创建某种特定类型的MFC应用程序,那么你可以编写一个自定义向导向导,自动为这个类型的应用程序生成所需的类、头文件和源文件,省去手动创建和编辑的步骤。 在这个"customwizard"压缩包中,...

    用VC++创建自定义向导程序源代码

    1. **向导框架**:向导程序通常基于对话框模板(Dialog Templates)构建,每个向导页对应一个对话框。开发者需要设计并实现各个页面的逻辑交互。 2. **向导接口**:VC++向导需要遵循一定的接口标准,如`IWizard`...

    创建项目模板的方法

    6. 除了标准的导出模板向导,还可以使用Visual Studio SDK来创建更复杂的VSIX格式的模板,这允许你实现更高级的自定义,例如自动化的模板扩展、多语言支持或更高效的部署机制。 通过创建和使用项目模板,开发团队...

    word日历向导模板

    "日历向导.Wiz"就是一个专为创建日历设计的模板,使用它可以大大节省时间和提高效率。 使用Word的日历向导模板,你可以按照以下步骤操作: 1. **打开模板**:首先,你需要解压缩文件并找到"日历向导.Wiz",然后在...

    MFC创建向导实例

    在Visual Studio中,我们应选择“MFC AppWizard”,然后在类型选项中选择“Dialog Based”或“Property Sheet Based”来创建一个基于对话框或属性表的向导。对话框向导通常包含一系列独立的对话框,而属性表向导则...

    利用elm和webpack构建electron应用的一个向导不是一个模板

    4. **Elm初始化**:在`src/elm`目录下,使用`elm init`命令创建一个新的Elm项目。编写Elm代码,可以利用Elm的模块系统和组件化特性,将业务逻辑分解为可重用的部分。 5. **Electron主进程**:在根目录下创建`main....

    SOUI创建向导工具

    1. **项目模板选择**:向导工具通常提供多种项目模板,如空白应用、对话框应用等,开发者可以根据实际需求选择合适的模板,减少手动创建和配置文件的工作量。 2. **依赖库自动管理**:工具会自动检测和添加SOUI库及...

    MFC 创建向导类对话框

    在本文中,我们将深入探讨如何使用Visual Studio 2017中的MFC(Microsoft Foundation Classes)框架创建一个向导类对话框。MFC是微软提供的一套C++库,它封装了Windows API,使得开发Windows应用程序变得更加简洁。...

    实例125 如何使用水晶报表向导创建报表C#

    通过以上步骤,我们便能使用水晶报表向导在C#项目中创建一个功能完善的报表。这个过程涵盖了数据连接、字段选择、布局设计和代码集成等多个关键环节,使得非编程背景的用户也能轻松创建专业的报表。在实际开发中,...

    VS2012创建项目模板方法图文教程

    VS2012创建项目模板方法图文教程 本教程旨在指导读者在VS2012中创建项目模板,从而提高项目开发效率。以下是相关知识点的总结...通过遵循特定的步骤和设置,可以创建一个自定义的项目模板,并根据需要进行修改和扩展。

    向导对话框向导对话框向导对话框

    文件可能还包含了资源文件,如对话框模板和控件ID,以及可能的样式和图标资源。 通过深入理解向导对话框的工作原理和设计原则,开发者可以创建出符合用户需求、易于操作的向导界面,从而提升软件的用户体验。在实际...

    自定义向导程序

    这些向导由一系列步骤组成,每个步骤对应一个对话框,用户可以通过交互来配置项目设置。 创建自定义向导涉及以下几个关键步骤: 1. **设计向导界面**:使用Visual Studio的资源编辑器设计向导的各个对话框,包括...

    VS2010 VC++创建.rc资源文件(二)

    这将创建一个简单的项目框架,没有默认的.rc文件。 接下来,我们需要添加一个新的资源脚本文件。在解决方案资源管理器中右键点击项目,选择“添加”-&gt;“新建项”。在“模板”类别中,找到“Visual C++”-&gt;“资源...

    使用 Eclipse 插件开发环境构建模板

    创建模板的第一步是创建一个新的插件项目,通过“File &gt; New &gt; Project &gt; Plug-in Project”路径,然后选择使用模板,并确保新项目依赖于org.eclipse.pde.ui。接着,我们可以进入插件编辑器的Extensions选项卡,开始...

    Swing 向导模板

    Swing向导模板是Java GUI开发中的一个实用工具,它基于模型-视图-控制器(MVC)设计模式,提供了一种结构化的方式来创建复杂的用户交互流程。在Swing库中,向导模板通常用于引导用户逐步完成一系列任务,如设置、...

    AngularJS 使用 UI Router 实现表单向导

    状态是指应用中的一种特定情景,它包含一个名称、一个URL、一个模板以及可能还有一个控制器。视图则是状态对应的HTML页面部分,控制器负责管理视图中数据的交互逻辑。通过为不同步骤的表单定义不同的状态,可以实现...

    《用VC++创建自定义向导程序》

    在IT行业中,开发工具的定制化能力是提升开发效率和用户体验的重要..."CustomWizard"和"TraditionalWizard"这两个项目提供了一个起点,让开发者有机会学习和实践自定义向导的开发技巧,进一步扩展和优化自己的应用。

Global site tag (gtag.js) - Google Analytics