<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鍵盤上的舞者

    像寫情書一樣Coding...
    隨筆 - 20, 文章 - 0, 評論 - 15, 引用 - 0
    數(shù)據(jù)加載中……

    使用文件模板和向?qū)?chuàng)建一個類型文件

    通過工具創(chuàng)建類型文件時通常會使用到各式各樣的模板,例如IDE在創(chuàng)建java文件時會自動在文件頭添加作者和創(chuàng)建日期的注釋、XML文件會自動添加根元素的標(biāo)簽等。在NetBeans里通過使用文件模板可以很方便的按照既定的模式創(chuàng)建你的類型文件。

    我在《創(chuàng)建新的文件類型 》里介紹了怎樣創(chuàng)建一個自定義的文件類型,創(chuàng)建后的文件類型里就包含了一個名為MapTemplate.xmap的空文件模板。現(xiàn)在我們將它變成一個真正有用的地圖文件模板,并且使用向?qū)占跏紖?shù)創(chuàng)建地圖文件。

    創(chuàng)建模塊項(xiàng)目

    現(xiàn)在創(chuàng)建一個模塊套件項(xiàng)目Florence 和一個模塊項(xiàng)目MapCoreUI ,將前文中創(chuàng)建的MapCore 模塊項(xiàng)目和MapCoreUI 一起加入Florence 。從命名就可以看出,我們的新建文件向?qū)?strong>MapCoreUI 中實(shí)現(xiàn)。

    創(chuàng)建文件模板

    打開我們之前創(chuàng)建的MapCore 項(xiàng)目,在包org.jqueen.nb.map.core 下可以找到一個名為MapTemplate.xmap 的空文件模板,雙擊打開后我們給它添加內(nèi)容使其變成一個真正有用的地圖文件模板:

    <?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>

     

    添加完成后把這個文件復(fù)制到MapCoreUI 項(xiàng)目的org/jqueen/nb/map/core/ui 目錄下。

    創(chuàng)建新建文件向?qū)?/span>

    1、打開項(xiàng)目MapCoreUI ,點(diǎn)擊新建文件菜單,在類別列表中選擇“模塊開發(fā)”,文件類型列表中選擇“向?qū)?#8221;,點(diǎn)擊“下一步”操作。


    2、注冊類型選擇“新建文件”,再在向?qū)姘鍞?shù)輸入框輸入“2”,點(diǎn)擊“下一步”操作。


    3、類名前綴輸入框輸入“CreateMap”,
    顯示名稱輸入“Map File”,
    類別選擇“其他”,
    包輸入框輸入“org.jqueen.nb.map.core.ui.wizard”,最后點(diǎn)擊“完成”結(jié)束操作。



    這時,我們可以看到,IDE自動為我們在項(xiàng)目文件夾里新建了許多文件,我們打開2個組件面板文件設(shè)計(jì)向?qū)У慕缑妫?/p>

    CreateMapVisualPanel1.java


    CreateMapVisualPanel2.java



    下面分別是兩個類的全部源碼:


    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 "名稱設(shè)置";
        }

        
    /** 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();
        }
    }


    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 "參數(shù)設(shè)置";
        }

        
    /** 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,現(xiàn)在我們可以給組件關(guān)聯(lián)的另外2個類添加獲取輸入?yún)?shù)的代碼了。
    打開文件CreateMapWizardPanel1.java ,新增一個方法:

        private String getFileName() {
            
    return ((CreateMapVisualPanel1) getComponent()).getFileName();
        }


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

    ((WizardDescriptor) settings).putProperty(CreateMapVisualPanel1.FILE_NAME, getFileName());
    ((TemplateWizard) settings).setTargetName(getFileName());


    打開文件CreateMapWizardPanel2.java ,新增一組方法:

        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() 方法里添加代碼:

        ((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());

     
    現(xiàn)在再重寫CreateMapWizardIterator.javainstantiate() 方法:

        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個補(bǔ)充模板腳本的方法:

        private String getTileScript(int rows, int cols) {
            String script 
    = "";
            
    for (int row = 0; row < rows; row++) {
                
    for (int col = 0; col < cols; col++) {
                    script 
    += ""n            <tile>"n" +
                            
    "                <attr name=""rowIndex"" intvalue=""" + row + """ />"n" +
                            "                <attr name=""colIndex"" intvalue=""" + col + """ />"n" +
                            "                <attr name=""iconResource"" intvalue=""0"" />"n" +
                            "            </tile>";
                }
            }
            script 
    = script.replaceFirst(""n""");
            return script;
        }
        
    private String getThingLayerScript(int size) {
            String script 
    = "";
            
    for (int i = 0; i < size; i++) {
                
    if (i > 0) {
                    script 
    += "";
                }
                script 
    += ""n        <layer type=""ThingLayer"">"n" +
                        
    "            <attr name=""name"" stringvalue=""ThingLayer" + i + """ />"n" +
                        "            <attr name=""depth"" intvalue=""" + (i + 1+ """ />"n" +
                        "        </layer>";
            }
            script 
    = script.replaceFirst(""n""");
            return script;
        }

     

    當(dāng)java類文件全部編寫完成后,我們還需要來做一些配置的工作。


    修改配置文件
    打開項(xiàng)目的layer.xml 文件,我們可以看到已經(jīng)自動生成了一些配置,我們對其做一些修改,將file 節(jié)點(diǎn)的name 屬性更改為“MapTemplate.xmap ”,同時添加一個屬性url="MapTemplate.xmap" ,用于和MapCore 模塊中定義的文件類型同步以及指定文件模板。另外在file 節(jié)點(diǎn)下新增一條屬性:“<attr name="javax.script.ScriptEngine" stringvalue="freemarker"/> ”。

        <folder name="Templates">
            
    <folder name="Other">
                
    <file name="MapTemplate.xmap" url="MapTemplate.xmap">
                    
    <attr name="SystemFileSystem.localizingBundle" stringvalue="org.jqueen.nb.map.core.ui.Bundle"/>
                    
    <attr name="instantiatingIterator" newvalue="org.jqueen.nb.map.core.ui.wizard.CreateMapWizardIterator"/>
                    
    <attr name="template" boolvalue="true"/>
                    
    <attr name="templateWizardURL" urlvalue="nbresloc:/org/jqueen/nb/map/core/ui/wizard/createMap.html"/>
                    
    <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
                
    </file>
            
    </folder>
        
    </folder>


    打開同級目錄下的Bundle.properties 文件,將Templates/Other/createMap=Map File 改為Templates/Other/MapTemplate.xmap=地圖文件

    最后,在項(xiàng)目的“重要文件”文件夾里雙擊“模塊清單”文件,在最后一行添加代碼:

    OpenIDE-Module-Needs: javax.script.ScriptEngine.freemarker


    現(xiàn)在,我們終于完成了所有的工作,編譯安裝我們的模塊套件項(xiàng)目后就可以使用向?qū)У姆绞絼?chuàng)建xmap格式文件了。


    posted on 2009-09-14 20:45 陳維 閱讀(583) 評論(0)  編輯  收藏 所屬分類: NetBeans

    主站蜘蛛池模板: 亚洲午夜精品一区二区麻豆| 亚洲精品456在线播放| 91精品啪在线观看国产线免费| 亚洲JIZZJIZZ妇女| 亚洲日韩激情无码一区| 免费在线视频一区| 亚洲成人免费在线| jzzjzz免费观看大片免费| 亚洲成在人线在线播放无码| 亚洲成年人在线观看| 最近免费最新高清中文字幕韩国| 特级aaaaaaaaa毛片免费视频| 亚洲一区二区三区深夜天堂| 久久国产亚洲精品无码| 国产亚洲无线码一区二区| 在线亚洲精品自拍| 亚洲一级特黄大片在线观看| 成人免费无码大片A毛片抽搐| 99久久99久久免费精品小说| 无码中文字幕av免费放dvd| 24小时日本韩国高清免费| 久久久久久成人毛片免费看| 久久免费高清视频| 国产午夜亚洲精品| 国内精品久久久久影院亚洲| 亚洲午夜精品久久久久久app| 精品国产成人亚洲午夜福利| 亚洲精品乱码久久久久蜜桃| 狼色精品人妻在线视频免费| 一区二区免费国产在线观看| 午夜网站在线观看免费完整高清观看| 四虎在线免费视频| 无码国模国产在线观看免费| 亚洲午夜福利AV一区二区无码| 亚洲爱情岛论坛永久| 亚洲欧美日韩一区二区三区 | 一出一进一爽一粗一大视频免费的| 久久精品成人免费看| 国产成人精品免费直播| 免费看国产精品3a黄的视频| mm1313亚洲精品无码又大又粗 |