| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| <html xmlns="http://www.w3.org/1999/xhtml">
|
| <head>
|
| <!-- -*- xhtml -*- -->
|
| <title>Учебный курс по интеграции типов файлов для платформы NetBeans 6.5</title>
|
| <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"/> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
| <meta name="AUDIENCE" content="NBUSER"/>
|
| <meta name="TYPE" content="ARTICLE"/>
|
| <meta name="EXPIRES" content="N"/>
|
| <meta name="developer" content="gwielenga@netbeans.org"/>
|
| <meta name="indexed" content="y"/>
|
| <meta name="description"
|
| content="A short guide to using the DataLoader API, as well as other APIs
|
| relating to file support."/>
|
| <!-- Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -->
|
| <!-- Use is subject to license terms.-->
|
| </head>
|
| <body>
|
| <h1>Учебный курс по интеграции типов файлов</h1>
|
|
|
| <p>В этом учебном курсе показано написание модуля, позволяющего среде IDE, а также любому другому приложению, основанному на платформе NetBeans, распозначать новый тип файлов.</p>
|
|
|
| <p><b class="notes">Примечание.</b> В этом документе используется среда IDE NetBeans версии 6.5. Если установлена среда IDE NetBeans 6.x, см <a href="60/nbm-filetype.html">версию 6.1 этого документа</a>.</p>
|
|
|
| <p><b>Содержание</b></p>
|
|
|
| <p><img src="../images/articles/69/netbeans-stamp7-8-9.png" class="stamp" width="114" height="114" alt="Содержимое на этой странице относится к среде IDE NetBeans 6.5, 6.7, 6.8" title="Содержимое на этой странице относится к среде IDE NetBeans 6.5, 6.7, 6.8" /></p>
|
| <ul class="toc">
|
| <li><a href="#intro">Введение в интеграцию типов файлов</a></li>
|
| <li><a href="#creating">Создание проекта модуля</a></li>
|
| <li><a href="#recognizing">Распознавание файлов Abc</a></li>
|
| <li><a href="#install">Установка и ознакомление с функциональными возможностями</a></li>
|
| <li><a href="#adding">Создание функциональных возможностей для файлов Abc</a>
|
| <ul>
|
| <li><a href="#action">Добавление действия</a></li>
|
| <li><a href="#topcomponent">Открытие файла в окне</a></li>
|
| <li><a href="#multiview">Создание окна с несколькими представлениями</a></li>
|
| </ul></li>
|
| <li><a href="#share">Создание совместно используемого исполняемого файла</a></li>
|
| </ul>
|
|
|
| <p><b>Для работы с этим руководством требуется программное обеспечение и ресурсы, перечисленные в следующей таблице.</b></p>
|
|
|
| <table>
|
| <tbody>
|
| <tr>
|
| <th class="tblheader" scope="col">Программное обеспечение или ресурс</th>
|
| <th class="tblheader" scope="col">Требуемая версия</th>
|
| </tr>
|
| <tr>
|
| <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">Среда IDE NetBeans</a></td>
|
| <td class="tbltd1">версия 6.7 или выше </td>
|
| </tr>
|
| <tr>
|
| <td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Комплект для разработчика на языке Java (JDK)</a></td>
|
| <td class="tbltd1">версия 6 или<br/>версия 5</td>
|
| </tr>
|
| </tbody>
|
| </table>
|
|
|
|
|
|
|
|
|
| <h2 class="tutorial"><a name="intro"></a>Введение в интеграцию типов файлов</h2>
|
|
|
| <p>Типам файлов, распознаваемых средой IDE, сопоставлены соответствующие значки, пункты меню и режимы поведения. Показаные ниже "файлы" представляют собой объекты <tt>FileObject</tt>, т.е. обертки вокруг <tt>java.io.File</tt> или, в случае файлов настройки, обычно обертки вокруг данных, сохраняемых другим способом, например внутри файлов XML в модулях. Фактически <i>видны</i> <tt>узлы (Node)</tt>, предоставляющие функциональные возможности, такие как действия и локализованные имена для объектов, подобных файлам. Между узлами <tt>Node</tt> и объектами <tt>FileObject</tt> располагаются объекты <tt>DataObject</tt>. Объект <tt>DataObject</tt> во всем подобен объекту <tt>FileObject</tt>, однако содержит информацию о типе отображаемого файла, и для файлов с разными расширениями (или файлов XML с разными пространствами имен) используются разные типы <tt>DataObject</tt>. Каждый из объектов <tt>DataObject</tt> предоставляется отдельным модулем, причем в каждом из них реализована поддержка одного или более типов файлов – например, в модуль Image предоставляет возможность распознавания и открытия файлов <tt>.gif</tt> и <tt>.png</tt>.</p>
|
|
|
| <p>Модуль, распознающий тип файла, устанавливает объект <tt>DataLoader</tt> – фабрику для <tt>DataObject</tt> для конкретного типа файла. При развертывании папки среда IDE опрашивает каждый известный объект <tt>DataLoader</tt> в целях опознания типа файлов. Первый объект, ответивший "да" на запрос, создает объект <tt>DataObject</tt> для этого файла. Для фактического отображения содержимого файла вызывается функция <tt>DataObject.getNodeDelegate()</tt> для каждого объекта <tt>DataObject</tt>, и в среде IDE на самом деле отображаются узлы <tt>Node</tt>.</p>
|
|
|
| <p>Ниже и слева показана схема данных, предоставляемых каждым из элементов, описанных выше.</p>
|
|
|
| <p><img src="../images/tutorials/filetype/diagram-dataobject2.png" alt="Схема." /></p>
|
|
|
| <p>Это руководство посвящено созданию модуля, устанавливающего объект <tt>DataLoader</tt> для вымышленного типа файлов "Abc" (расширение файлов <tt>.abc</tt>). По умолчанию файл с расширением "abc" обрабатывается аналогично любому другому неопознанному файлу – как текстовый файл, и в результате для файлов Abc предоставляются те же функциональные возможности среды IDE, что и для текстовых файлов. После создания модуля будет показан способ расширения этих функциональных возможностей, уникальных для файлов Abc. По завершении цикла разработки дргуим разработчикам несложно предоставить возможность использования созданного модуля – в среде IDE предоставляется возможность создания двоичного файла, который можно передать другим разработчикам, которые затем смогут установить его посредством центра обновлений. </p>
|
|
|
| <!-- ===================================================================================== -->
|
|
|
| <h2 class="tutorial"><a name="creating"></a>Создание проекта модуля</h2>
|
|
|
| <p>В этом разделе используется мастер для создания структуры исходного кода, требуемого любым модулем NetBeans. Эта структура исходного кода состоит из ряда папок в особых местах и набора файлов, которые требуются в любом случае. Например, для каждого модуля NetBeans требуется папка <tt>nbproject</tt>, в которой хранятся метаданные проекта, а также файл <tt>layer.xml</tt>, в котором объявляется регистрация таких элементов как кнопки панелей управления и окна.</p>
|
|
|
| <ol>
|
|
|
| <li>Выберите в меню "Файл" команду "Новый проект" (CTRL+SHIFT+N). В разделе "Категории" выберите параметр "Модули NetBeans". В области "Проекты" выберите "Модуль" и нажмите кнопку "Далее".</li>
|
| <li>На панели "Имя и расположение" в поле "Имя проекта" введите <tt>AbcFileType</tt>. В поле "Расположение проекта" укажите любой каталог на компьютере, например <tt>c:\mymodules</tt>. Оставьте переключатель "Отдельный модуль" выбранным. Панель должна выглядеть следующим образом:
|
|
|
| <p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/65-projectwizard1.png" alt="Действие 1 мастера создания проекта" /></p>
|
| <p>Нажмите кнопку "Далее".</p></li>
|
|
|
| <li>На панели "Основные настройки модуля" введите <tt>org.myorg.abcfiletype</tt> в поле "Основа кодового имени". Добавьте пробелы к предложенному отображаемому имени модуля, и измените его на <tt>Abc File Type</tt>. Установите флажок "Создать слой XML" и оставьте местоположение локализуемого файла ресурсов и слоя XML по умолчанию; при этом они будут храниться в пакете с именем <tt>org/myorg/abcfiletype</tt>. Панель должна выглядеть следующим образом:
|
|
|
| <p><img src="../images/tutorials/filetype/65-projectwizard2.png" alt="Действие 2 мастера создания проекта" /></p></li>
|
|
|
| <li>Нажмите кнопку "Готово". </li></ol>
|
|
|
| <p> В среде IDE создается проект <tt>Abc File Type</tt>. Проект содержит все исходные файлы и метаданные проекта, например, сценарий сборки проекта Ant. Проект откроется в среде IDE. Логическую структуру проекта можно просмотреть в окне "Проекты" (CTRL+1), а его файловую структуру – в окне "Файлы" (CTRL+2). Например, окно "Проекты" должно выглядеть следующим образом:</p>
|
|
|
| <p><img src="../images/tutorials/filetype/65-projectswindow1.png" alt="Первоначальный вид окна "Проекты". " /></p>
|
|
|
| <!-- ===================================================================================== -->
|
| <h2><a name="recognizing"></a>Распознавание файлов Abc</h2>
|
|
|
| <p>В этом разделе с помощью мастера создаются классы, необходимые для распознавания файлов Abc как отличных от файлов всех других видов. Как уже указывалось в начале учебного курса, для этого потребуется объект данных и загрузчик данных, а также средство разрешения типа MIME и сущности регистрации в файле <tt>layer.xml</tt>. Все эти элементы создаются автоматически с помощью мастера создания файла.</p>
|
|
|
|
|
| <ol>
|
|
|
| <li>Щелкните узел проекта правой кнопкой мыши и выберите команду "Создать > Тип файлов".</li>
|
| <li>Установите следующие значения на панели "Распознавание файлов":
|
| <ul>
|
| <li>Введите <tt>text/x-abc</tt> в поле "Тип MIME".</li>
|
| <li>Введите <tt>.abc .ABC</tt> в поле "Расширение файла".</li>
|
| </ul>
|
| <p>Панель "Распознавание файлов" должна выглядеть следующим образом:</p>
|
|
|
| <p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/60-filewizard1.png" alt="Действие 1 мастера создания файла" /></p>
|
|
|
| <p>Обратите внимание на следующие сведения о полях на панели "Распознавание файлов":</p>
|
| <ul>
|
| <li><b>Тип MIME.</b> Указывается уникальный тип MIME объекта данных.</li>
|
| <li>по
|
| <ul><li><b>Расширение файла.</b> Указывается одно или более расширений файлов, по которым средой IDE распознается принадлежность файла к указанному типу MIME. Расширение файла можно в факультативном порядке предварять точкой. В качестве разделителей используются запятые, пробелы, или запятые вместе с пробелами. Следовательно, действительными являются все следующие варианты записи:
|
| <ul><li><tt>.abc,.def</tt></li>
|
| <li><tt>.abc .def</tt></li>
|
| <li><tt>abc def</tt></li>
|
| <li><tt>abc,.def ghi, .wow</tt></li></ul>
|
| <p>Представим, что для файлов Abc учитывается регистр. Поэтому в этом учебном курсе указывается <i>два</i> типа MIME: <tt>.abc</tt> и <tt>.ABC</tt>.</p></li>
|
| <li><b>Корневой элемент XML.</b> Указывается уникальное пространство имен, отличающее тип файла XML от всех остальных типов файлов XML. Поскольку многие файлы XML обладают одинаковым расширением (<tt>xml</tt>), различие между файлами XML проводится в среде IDE по их корневым элементам XML. Точнее, в среде IDE возможно различие между пространствами имен и первым элементом XML в файлах XML. Это, например, можно использовать для различия между описателем развертывания JBoss и описателем развертывания WebLogic. Если это различие сделано, можно обеспечить недоступность пунктов меню, добавленных к контекстному меню описателя развертывания JBoss, для описателя развертывания WebLogic. Примеры по данному вопросу приведены в <a href="nbm-palette-api2.html">Руководстве по модулю палитры компонентов NetBeans</a>.</li></ul></li>
|
| </ul>
|
|
|
| <p>Нажмите кнопку "Далее".</p></li>
|
|
|
| <li>На панели "Имя и расположение" введите <tt>Abc</tt> в качестве префикса имени класса и выберите любой файл изображения размером 16 на 16 пикселей в качестве значка нового типа файлов, в соответствии с иллюстрацией ниже.
|
|
|
| <p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/65-filewizard2.png" alt="Действие 2 мастера создания файла" /></p>
|
|
|
|
|
| <p><b>Примечание.</b> Можно использовать любой значок размером 16x16 пикселей. Если требуется, можно щелкнуть этот значок, сохранить его локально, а затем указать его в мастере, как указано выше: <img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/Datasource.gif" alt="Datasource.gif" /></p></li>
|
|
|
| <li>Нажмите кнопку "Готово". </li></ol>
|
|
|
| <p>Окно "Проекты" должно выглядеть следующим образом:</p>
|
|
|
| <p><img src="../images/tutorials/filetype/65-projectswindow2.png" alt="Итоговое окно "Проекты". " /></p>
|
|
|
| <p>Рассмотрим краткое описание каждого из сгенерированных файлов:</p>
|
| <ul>
|
| <li><b>AbcDataObject.java.</b> Обертывает <tt>FileObject</tt>. Объекты данных (DataObject) создаются загрузчиками данных (DataLoader). Подробные сведения см. в документе <a href="http://wiki.netbeans.org/wiki/view/DevFaqDataObject">Что такое DataObject?</a>.</li>
|
| <li><b>AbcResolver.xml.</b> Отображает расширения <tt>.abc</tt> и <tt>.ABC</tt> на тип MIME. <tt>AbcDataLoader</tt> распознает только тип MIME; о расширении файлов ему ничего не известно.</li>
|
| <li><b>AbcTemplate.abc.</b> Предоставляет основу шаблона файла, зарегистрированного в файле <tt>layer.xml</tt> так, чтобы он устанавливался в диалоговом окне "Новый файл" в качестве нового шаблона.</li>
|
| <li><b>AbcDataObjectTest.java.</b> класс теста JUnit для <tt>DataObject</tt>.</li>
|
| </ul>
|
|
|
| <p>В файле <tt>layer.xml</tt> должен содержаться следующий текст:</p>
|
|
|
| <pre><folder name="Loaders"> |
| <folder name="text"> |
| <folder name="x-abc"> |
| <folder name="Actions"> |
| <file name="org-myorg-abcfiletype-MyAction.shadow"> |
| <attr name="originalFile" stringvalue="Actions/Edit/org-myorg-abcfiletype-MyAction.instance"/> |
| <attr name="position" intvalue="600"/> |
| </file> |
| <file name="org-openide-actions-CopyAction.instance"> |
| <attr name="position" intvalue="100"/> |
| </file> |
| <file name="org-openide-actions-CutAction.instance"> |
| <attr name="position" intvalue="200"/> |
| </file> |
| <file name="org-openide-actions-DeleteAction.instance"> |
| <attr name="position" intvalue="300"/> |
| </file> |
| <file name="org-openide-actions-FileSystemAction.instance"> |
| <attr name="position" intvalue="400"/> |
| </file> |
| <file name="org-openide-actions-OpenAction.instance"> |
| <attr name="position" intvalue="500"/> |
| </file> |
| <file name="org-openide-actions-PropertiesAction.instance"> |
| <attr name="position" intvalue="700"/> |
| </file> |
| <file name="org-openide-actions-RenameAction.instance"> |
| <attr name="position" intvalue="800"/> |
| </file> |
| <file name="org-openide-actions-SaveAsTemplateAction.instance"> |
| <attr name="position" intvalue="900"/> |
| </file> |
| <file name="org-openide-actions-ToolsAction.instance"> |
| <attr name="position" intvalue="1000"/> |
| </file> |
| <file name="sep-1.instance"> |
| <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> |
| <attr name="position" intvalue="1100"/> |
| </file> |
| <file name="sep-2.instance"> |
| <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> |
| <attr name="position" intvalue="1200"/> |
| </file> |
| <file name="sep-3.instance"> |
| <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> |
| <attr name="position" intvalue="1300"/> |
| </file> |
| <file name="sep-4.instance"> |
| <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> |
| <attr name="position" intvalue="1400"/> |
| </file> |
| </folder> |
| <folder name="Factories"> |
| <file name="AbcDataLoader.instance"> |
| <attr name="SystemFileSystem.icon" urlvalue="nbresloc:/org/myorg/abcfiletype/Datasource.gif"/> |
| <attr name="dataObjectClass" stringvalue="org.myorg.abcfiletype.AbcDataObject"/> |
| <attr name="instanceCreate" methodvalue="org.openide.loaders.DataLoaderPool.factory"/> |
| <attr name="mimeType" stringvalue="text/x-abc"/> |
| </file> |
| </folder> |
| </folder> |
| </folder> |
| </folder></pre>
|
|
|
|
|
|
|
| <!-- ======================================================================================= -->
|
|
|
| <h2><a name="install"></a>Установка и ознакомление с функциональными возможностями</h2>
|
| <p>Теперь установим модуль и воспользуемся базовыми функциональными возможностями, созданными на данный момент. Для построения и установки модуля в среде IDE используется сценарий построения Ant. При создании проекта автоматически создается сценарий построения.</p>
|
| <div class="indent">
|
|
|
|
|
| <ol>
|
| <li>В окне "Проекты" щелкните правой кнопкой мыши проект <tt>Abc File Type</tt> и выберите "Выполнить".
|
| <p>Запустится новый экземпляр среды IDE, выполняющий установку модуля в себя.</p></li>
|
| <li>Создайте приложение любого типа в среде IDE с помощью диалогового окна "Новый проект" (CTRL+SHIFT+N).</li>
|
| <li>Щелкните узел приложения правой кнопкой мыши и выберите в меню "Создать" команду "Прочее". В категории "Прочее" доступен шаблон для работы с новым типом файлов:
|
| <p><img src="../images/tutorials/filetype/60-action4.png" alt="Фиктивный шаблон." /></p>
|
| <p>Выполните мастер до конца; в результате будет создан шаблон, который может использоваться пользователем для работы с данным типом файлов.</p>
|
| <p class="tips">Если посредством шаблона должен предоставляться код по умолчанию, добавьте этот код к файлу <tt>AbcTemplate.abc</tt>, автоматически созданному мастером "Новый тип файла".</p></li>
|
| </ol>
|
| </div>
|
|
|
| <!-- ===================================================================================== -->
|
| <h2><a name="adding"></a>Создание функциональных возможностей для файлов Abc</h2>
|
| <p>Теперь, когда в платформу NetBeans внедрена возможность отличения файлов Abc от других типов файлов, пришло время добавить функциональные возможности, специально предназначенные для работы с файлами этого типа. В этом разделе добавляется пункт меню в контекстное меню узла файла в окнах обозревателей, например в окне "Проекты", и добавляется возможность открытия файла в окне, а не в редакторе.</p>
|
|
|
| <div class="indent">
|
|
|
| <h3 class="tutorial"><a name="action"></a>Добавление действия</h3>
|
|
|
| <p>В этом подразделе с помощью мастера создания действия создается класс Java, выполняющее действие для рассматриваемого типа файлов. Мастер также регистрирует класс в файле <tt>layer.xml</tt>, после чего у пользователя появляется возможность вызывать созданное действие из контекстного меню узла типа файла в окне обозревателя.</p>
|
|
|
| <ol>
|
|
|
| <li>Щелкните узел проекта правой кнопкой мыши и выберите в меню "Создать" команду "Действие".</li>
|
| <li>В панели "Тип действия" выберите "Включено по условию". Введите <tt>AbcDataObject</tt>, т.е. имя объекта данных, созданного выше посредством мастера создания типов файлов, как показано ниже:
|
|
|
| <p><img src="../images/tutorials/filetype/60-action1.png" alt="Действие 1 мастера создания действия" /></p>
|
|
|
|
|
|
|
| <p>Нажмите кнопку "Далее".</p></li>
|
|
|
| <li>На панели "Регистрация в интерфейсе" выберите категорию "Изменить" в раскрывающемся списке "Категория". Значение, выбранное в раскрываюшемся списке "Категория", определяет место отображения действия в редакторе сочетаний клавиш в среде IDE.
|
| <p>Затем снимите флажок "Глобальный пункт меню" и установите флажок "Пункт контекстного меню типа файла". В раскрывающемся списке "Тип содержимого" выберите тип MIME, указанный выше в мастере создания типов файлов, в соответствии с иллюстрацией ниже:</p>
|
|
|
| <p><img src="../images/tutorials/filetype/60-action2.png" alt="Действие 2 мастера создания действия" /></p>
|
|
|
| <p>Отметим, что существует возможность задания положения пункта меню, и что пункт меню можно разграничить от предыдушего и следующего пункта. Нажмите кнопку "Далее".</p></li>
|
|
|
| <li>На панели "Имя и расположение" введите <tt>MyAction</tt> в качестве имени класса и <tt>My Action</tt> в поле "Видимое имя". В пунктах контекстных меню не отображаются значки. Поэтому нажмите кнопку "Готово", после чего файл <tt>MyAction.java</tt> будет добавлен к пакету <tt>org.myorg.abcfiletype</tt>.</li>
|
|
|
| <li>В редакторе исходного кода добавьте код в метод <tt>actionPerformed</tt> действия:
|
|
|
| <pre class="examplecode">@Override
|
| public void actionPerformed(ActionEvent ev) {
|
| FileObject f = context.getPrimaryFile();
|
| String displayName = FileUtil.getFileDisplayName(f);
|
| String msg = "I am " + displayName + ". Зверь рыкающий!"; |
| NotifyDescriptor nd = new NotifyDescriptor.Message(msg); |
| DialogDisplayer.getDefault().notify(nd); |
| }</pre>
|
| <p>Нажмите CTRL+SHIFT+I. В верхнюю часть класса автоматически добавляются выражения импорта.</p>
|
|
|
| <p class="tips">Часть кода по-прежнему выделена красным подчеркиванием, что указывает на отсутствие ряда требуемых пакетов в пути классов. Щелкните правой кнопкой мыши узел проекта, выберите "Свойства" и щелкните "Библиотеки" в диалоговом окне "Свойства проекта". Щелкните в верхней части панели "Библиотеки" и добавьте интерфейс API диалогов.</p>
|
|
|
| <p>В классе <tt>MyAction.java</tt> снова нажмите CTRL+SHIFT+I. Выделение красным подчеркиванием снимается, поскольку требуемые пакеты обнаруживаются средой IDE в интерфейсе API диалогов.</p></li>
|
|
|
| <li>В узле "Важные файлы" разверните подузел "Слой XML". Обозреватель <a href="https://platform.netbeans.org/tutorials/nbm-glossary.html">Файловая система среды</a> состоит из двух узлов: <tt><этот слой></tt> и <tt><этот слой в контексте></tt>, а также их подузлов. Разверните узел <tt><этот слой></tt>, разверните подузел <tt>Загрузчики</tt>, и продолжайте разворачивать узлы, пока не станет видно <tt>действие</tt>, созданное ранее.</li>
|
|
|
| <li>Перетащите <tt>My Action</tt> в позицию ниже действия <tt>Open</tt>, как показано ниже:
|
| <p><img src="../images/tutorials/filetype/60-action3.png" alt="Обозреватель файловой системы среды" /></p>
|
|
|
| <p>Как было показано в двух предыдущих действиях, обозреватель файловой системы среды можно использовать для быстрой реорганизации последовательности элементов, зарегистрированных в файловой системе среды.</p></li>
|
|
|
| <li>Снова выполните модуль, как в предыдущем разделе.</li>
|
| <li>Создайте файл ABC на основе шаблона, показанного в предыдущем разделе, и щелкните правой кнопкой мыши узел файла в одном из представлений обозревателя, например, в окнах "Проекты" или "Избранное".
|
| <p>Обратите внимание, что файл Abc снабжен значком, который был назначен ему в соответствующем модуле, и что список действий, назначенный в соответствующем файле <tt>layer.xml</tt>, выводится в контекстном меню, вызываемом щелчком правой кнопкой мыши:</p>
|
| <p><img src="../images/tutorials/filetype/60-dummytemplate.png" alt="Итоговое окно "Проекты". " /></p></li>
|
| <li>Выберите новый пункт меню; отображается имя и местоположение файла Abc.
|
| <p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/60-information.png" alt="Сведения." /></p></li>
|
|
|
|
|
| </ol>
|
|
|
| <p>Итак, было рассмотрено создание нового действия, доступного из контекстного меню для файла определенного типа, в окнах "Проекты", "Файлы" или "Избранное".</p>
|
|
|
| <h3 class="tutorial"><a name="topcomponent"></a>Открытие файла в окне</h3>
|
| <p>По умолчанию при открытии файла, тип которого был определен в этом учебном курсе, такой файл открывается в базовом редакторе. Однако иногда может потребоваться создать визуальное представление файла, и предоставить пользователю возможность перетаскивать элементы оформления в это визуальное представление. Первый этап создания подобного интерфейса пользователя - это предоставление пользователю возможности открытия файла в окне. В этом подразделе приведена последовательность необходимых действий.</p>
|
| <ol>
|
| <li>Щелкните узел проекта правой кнопкой мыши и выберите в меню "Создать" команду "Оконный компонент". Установите для параметра "Позиция окна" значение "editor" и отметьте флажок "Открывать при запуске приложения", как показано ниже:
|
|
|
| <p><img src="../images/tutorials/filetype/65-topc-1.png" alt="Действие 1 мастера создания действия" /></p></li>
|
| <li>Нажмите кнопку "Далее" и введите "Abc" в качестве префикса имени классов.
|
| <p><img src="../images/tutorials/filetype/65-topc-2.png" alt="Действие 1 мастера создания действия" /></p>
|
| <p>Нажмите кнопку "Готово". </p>
|
| </li>
|
| <li>Измените <tt>DataObject</tt>: укажите использование <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-loaders/org/openide/loaders/OpenSupport.html">OpenSupport</a></tt> вместо DataEditorSupport, для чего измените конструктор <tt>DataObject</tt> следующим образом:
|
|
|
| <pre>public AbcDataObject(FileObject pf, MultiFileLoader loader) |
| throws DataObjectExistsException, IOException { |
| |
| super(pf, loader); |
| CookieSet cookies = getCookieSet(); |
| <b>//cookies.add((Node.Cookie) DataEditorSupport.create(this, getPrimaryEntry(), cookies)); |
| cookies.add((Node.Cookie) new AbcOpenSupport(getPrimaryEntry()));</b> |
| |
| }</pre>
|
| </li>
|
|
|
| <li>Создайте класс <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-loaders/org/openide/loaders/OpenSupport.html">OpenSupport</a></tt>:
|
|
|
| <pre>class AbcOpenSupport extends OpenSupport implements OpenCookie, CloseCookie { |
| |
| public AbcOpenSupport(AbcDataObject.Entry entry) { |
| super(entry); |
| } |
| |
| protected CloneableTopComponent createCloneableTopComponent() { |
| AbcDataObject dobj = (AbcDataObject) entry.getDataObject(); |
| AbcTopComponent tc = new AbcTopComponent(); |
| tc.setDisplayName(dobj.getName()); |
| return tc; |
| } |
| |
| }</pre>
|
|
|
| <p class="tips">Настройте TopComponent: он должен расширять CloneableTopComponent, а не TopComponent. Установите для модификатора класса TopComponent и модификатора его конструктора параметр public вместо private.</p></li>
|
| </ol>
|
| <p>Снова выполните модуль; когда при открытии файла Abc его открытие обрабатывается классом <tt>OpenSupport</tt>, обеспечивается открытие файла в <tt>TopComponent</tt>, а не в базовом редакторе, предоставляемом <tt>DataEditorSupport</tt>:</p>
|
|
|
| <p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/65-topc-3.png" alt="Действие 1 мастера создания действия" /></p>
|
|
|
| <p class="tips">В документе <a href="https://platform.netbeans.org/tutorials/nbm-visual_library.html">Руководство по Visual Library NetBeans</a> приведен пример дальнейшей разработки TopComponent для визуального отображения содержимого файла, соответствующего типу файла, определенному в этом руководстве.</p>
|
|
|
| <br />
|
|
|
| <!-- ======================================================================================= -->
|
|
|
| <h3><a name="multiview"></a>Создание окна с несколькими представлениями</h3>
|
|
|
| <p>Теперь файл можно открыть в окне; добавим к этому окну дополнительные функциональные возможности. Создадим окно с несколькими представлениями. На первой вкладке окна с несколькими представлениями обычно выводится визуальное представление файла, а на второй вкладке обычно содержится представление исходного кода. Кроме этих двух можно использовать дополнительные закладки, содержащие более подробные данные об открытом файле.</p>
|
|
|
| <ol>
|
| <li>Щелкните правой кнопкой узел проекта и выберите команду "Свойства". В диалоговом окне "Свойства проекта" выберите "Библиотеки" и нажмите "Добавить". Укажите зависимость от <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-core-multiview/overview-summary.html">окон с несколькими представлениями</a>. Нажмите кнопку "ОК", после чего нажмите кнопку "ОК" еще раз для закрытия диалогового окна "Свойства проекта".</li>
|
| <li>Для каждой закладки, для которой требуется создать окно с несколькими представлениями, необходимо создать класс, реализующий <tt><a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-core-multiview/org/netbeans/core/spi/multiview/MultiViewDescription.html">MultiViewDescription</a></tt> и <tt>Serializable</tt>.<p>В рамках этого учебного курса начнем с класса, который назовем <tt>AbcMultiviewDescription1</tt>. Этот класс реализует следующие указанные классы:</p>
|
| <pre>public class AbcMultiviewDescription1 implements MultiViewDescription, Serializable { |
| |
| public int getPersistenceType() { |
| throw new UnsupportedOperationException("Пока не поддерживается."); |
| } |
| |
| public String getDisplayName() { |
| throw new UnsupportedOperationException("Пока не поддерживается."); |
| } |
| |
| public Image getIcon() { |
| throw new UnsupportedOperationException("Пока не поддерживается."); |
| } |
| |
| public HelpCtx getHelpCtx() { |
| throw new UnsupportedOperationException("Пока не поддерживается."); |
| } |
| |
| public String preferredID() { |
| throw new UnsupportedOperationException("Пока не поддерживается."); |
| } |
| |
| public MultiViewElement createElement() { |
| throw new UnsupportedOperationException("Пока не поддерживается.");
|
| }
|
|
|
| }</pre>
|
|
|
| <p class="tips">В классе <tt>AbcMultiviewDescription1</tt>, приведенном выше, метод <tt>createElement()</tt> возвращает объект MultiViewElement. Однако требуется возвращать созданный <tt>TopComponent</tt>, для чего перейдем к следующему действию.</p></li>
|
|
|
| <li>Перепишите сигнатуру класса. Для предоставления элемента с несколькими представлениями для описания в предыдущих действиях необходимо реализовать <tt><a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-core-multiview/org/netbeans/core/spi/multiview/MultiViewElement.html">MultiViewElement</a></tt>:
|
|
|
| <pre>public final class AbcTopComponent extends TopComponent implements MultiViewElement {</pre>
|
|
|
| <p>В классе <tt>TopComponent</tt> необходимо удалить (или закомментировать) методы <tt>findInstance()</tt>, <tt>getPersistenceType()</tt>, <tt>writeReplace()</tt> и <tt>preferredID()</tt>.</p></li>
|
|
|
| <li>Для начала создадим очень простые реализации для каждого из требуемых методов. Сначала определим новый элемент <tt>JToolbar</tt> в верхней части класса <tt>TopComponent</tt>:
|
|
|
| <pre>private JToolBar toolbar = new JToolBar();</pre>
|
|
|
| <p>Затем реализуем методы следующим образом:</p>
|
|
|
| <pre> public JComponent getVisualRepresentation() { |
| return this; |
| } |
| |
| public JComponent getToolbarRepresentation() { |
| return toolbar; |
| } |
| |
| public void setMultiViewCallback(MultiViewElementCallback arg0) { |
| } |
| |
| public CloseOperationState canCloseElement() { |
| return null; |
| } |
| |
| public Action[] getActions() { |
| return new Action[]{}; |
| } |
| |
| public Lookup getLookup() { |
| return Lookups.singleton(this); |
| } |
| |
| public void componentShowing() { |
| } |
| |
| public void componentHidden() { |
| } |
| |
| public void componentActivated() { |
| } |
| |
| public void componentDeactivated() { |
| } |
| |
| public UndoRedo getUndoRedo() { |
| return UndoRedo.NONE; |
| }</pre></li>
|
|
|
| <li>Теперь переопределим <tt>AbcMultiviewDescription1</tt> следующим образом:
|
|
|
| <pre>public class AbcMultiviewDescription1 implements MultiViewDescription, Serializable { |
| |
| public int getPersistenceType() { |
| return TopComponent.PERSISTENCE_ALWAYS; |
| } |
| |
| public String getDisplayName() { |
| return "Tab 1"; |
| } |
| |
| public Image getIcon() { |
| return ImageUtilities.loadImage("/org/myorg/abcfiletype/Datasource.gif"); |
| } |
| |
| public HelpCtx getHelpCtx() { |
| return null; |
| } |
| |
| public String preferredID() { |
| return "AbcMultiviewDescription1"; |
| } |
| |
| public MultiViewElement createElement() { |
| return new AbcTopComponent(); |
| } |
| |
| }</pre></li>
|
|
|
| <li>Измените метод <tt>createCloneableTopComponent</tt> в классе <tt>OpenSupport</tt> для открытия <tt>TopComponent</tt> посредством класса <tt>MultiViewDescription</tt>, созданного выше:
|
|
|
| <pre>protected CloneableTopComponent createCloneableTopComponent() { |
| |
| // Создание массива дескрипторов множества представлений: |
| AbcMultiviewDescription1 firstTab = new AbcMultiviewDescription1(); |
| MultiViewDescription[] descriptionArray = { firstTab }; |
| |
| // Создание окна с несколькими представлениями: |
| CloneableTopComponent tc = MultiViewFactory.createCloneableMultiView(descriptionArray, firstTab, null); |
| tc.setDisplayName(entry.getDataObject().getName()); |
| return tc; |
| |
| }</pre>
|
|
|
|
|
| <p class="tips">Второй аргумент метода <tt>MultiViewFactory.createCloneableMultiView</tt> определяет вкладку, открываемую по умолчанию. В данном случае выбрана вкладка <tt>firstTab</tt>, определяемая в <tt>AbcMultiViewDescription1</tt>.</p></li>
|
|
|
| <li>Выполните установку и снова откройте файл. Теперь в окне с несколькими представлениями создана одна вкладка:
|
|
|
| <p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/65-mvdeployed.png" alt="развернутое окно с несколькими представлениями" /></p></li>
|
|
|
| </ol>
|
|
|
| <p>Теперь в окне с несколькими представлениями создана одна вкладка. Для каждой дополнительной вкладки необходимо создать новый класс <tt>MultiviewDescription</tt> с новым элементом <tt>TopComponent</tt>, а затем создать экземпляр класса <tt>MultiViewDescription</tt> в классе расширения <tt>OpenSupport</tt>, как показано выше.</p>
|
|
|
| </div>
|
|
|
|
|
| <!-- ======================================================================================= -->
|
|
|
| <h2><a name="share"></a>Создание совместно используемого исполняемого файла модуля</h2>
|
|
|
| <p>Готовый модуль можно предоставить для использования другими разработчиками. Для этого необходимо создать и распространить двоичный файл "NBM" (модуль NetBeans).</p>
|
|
|
| <div class="indent">
|
|
|
| <ol>
|
| <li>В окне "Проекты" щелкните правой кнопкой мыши проект <tt>Abc File Type</tt> и выберите "Создать файл распространения модуля NBM".
|
|
|
| <p>Создается файл NBM, который можно просмотреть в окне "Файлы" (CTRL+2).</p>
|
| <p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/60-shareable-nbm.png" alt="Файл распространения модуля NBM, предназначенный для совместного использования." /></p></li>
|
| <li>Чтобы предоставить этот файл для использования другим разработчикам, можно, например, воспользоваться <a href="http://plugins.netbeans.org/PluginPortal/">порталом подключаемых модулей NetBeans</a>. Для установки модуля получатель должен воспользоваться диспетчером подключаемых модулей ("Сервис > Подключаемые модули").</li>
|
| </ol>
|
|
|
| </div>
|
|
|
|
|
| <!-- ======================================================================================== -->
|
|
|
|
|
| <br>
|
| <div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&subject=Feedback:%20File%20Type%20Module%20Tutorial">Мы ждем ваших отзывов</a></div>
|
| <br style="clear:both;" />
|
|
|
|
|
| <!-- ======================================================================================== -->
|
|
|
| <h2><a name="nextsteps"></a>Что дальше?</h2>
|
|
|
| <p>Дополнительные сведения о создании и разработке модулей NetBeans приведены в следующих ресурсах:
|
| <ul>
|
| <li><a href="https://platform.netbeans.org/index.html">Домашняя страница платформы NetBeans</a></li>
|
| <li><a href="https://netbeans.org/download/dev/javadoc/">Список интерфейсов API среды NetBeans (текущая версия разработки)</a></li>
|
| <li><a href="https://netbeans.org/kb/trails/platform_ru.html">Другие связанные руководства</a></li></ul>
|
| </p>
|
|
|
| <!-- ======================================================================================== -->
|
| <!--
|
| <h2><a name="version"></a>Versioning </h2>
|
|
|
| <p>
|
|
|
| <table width="76%" >
|
| <tbody>
|
| <tr>
|
| <td>
|
| <div align="left"><b>Version</b></div>
|
| </td>
|
| <td>
|
| <div align="left"><b>Date</b></div>
|
| </td>
|
| <td>
|
| <div align="left"><b>Changes</b></div>
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 1
|
| </td>
|
| <td>
|
| 25 August 2005
|
| </td>
|
| <td>
|
| <ul><li>Initial version.
|
| <li>To do:
|
| <ul><li>Add post-creation customizations (i.e., the "Extending Support for the New File Type" section).
|
| <li>Explain what the generated files are for (placeholders currently).
|
| <li>Explain the layer file's entries.
|
| <li>Explain the first File Type panel (placeholders currently).
|
| <li>Maybe create a separate tutorial for recognizing XML files.</ul></ul>
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 2
|
| </td>
|
| <td>
|
| 23 September 2005
|
| </td>
|
| <td>
|
| <ul><li>A lot of info added from the FAQ and added the Action wizard and System Filesystem Browser.
|
| <li>To do:
|
| <ul><li>Explain <tt>LoaderBeanInfo.java</tt> and <tt>Resolver.xml</tt> (one line each)
|
| <li>Maybe create a separate tutorial for recognizing XML files.
|
| <li>Using Tomcat GIF maybe not good idea.
|
| <li>Maybe the action should do something useful.
|
| <li>Maybe direct links to FAQ not good idea.
|
| <li>Probably more needed on <tt>layer.xml</tt> file.
|
| <li>Maybe other useful apisupport functionality could be added to this scenario.
|
| <li>More info needed on MIME types.
|
| <li>The introductory paragraphs should be illustrated with a graphic. A diagram to
|
| show relationship between node, dataobject, fileobject, dataloader, etc.</ul></ul>
|
| </td>
|
| </tr>
|
|
|
| <tr>
|
| <td>
|
| 3
|
| </td>
|
| <td>
|
| 28 September 2005
|
| </td>
|
| <td>
|
| <ul><li>Integrated comments from Jesse Glick.
|
| <li>To do:
|
| <ul> <li>More info needed on MIME types.
|
| <li>The introductory paragraphs should be illustrated with a graphic. A diagram to
|
| show relationship between node, dataobject, fileobject, dataloader, etc.
|
| <li>Many Javadoc links to be added (also for <tt>performAction</tt>.
|
| <li>Info on cookies, cookie actions, cookie classes needed.
|
| <li>Action ended up in text-html even though I chose my own mime type.
|
| <li>Need to explain or link to explanation for instance, shadow, etc.
|
| <li>Platform Manager needs to be mentioned in the context of installing
|
| in target platform.
|
| <li>Show how to add properties to the property sheet.</ul></ul>
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 4
|
| </td>
|
| <td>
|
| 4 October 2005
|
| </td>
|
| <td>
|
| <ul><li>Added two diagrams in the introductory paragraphs, from Tim Boudreau's JavaOne presentation.
|
| <li>To do:
|
| <ul> <li>More info needed on MIME types.
|
| <li>Many Javadoc links to be added (also for <tt>performAction</tt>).
|
| <li>Need to create section near the start: "Related FAQs":
|
| <ul><li>Info on cookies, cookie actions, cookie classes needed.
|
| <li>Need to explain or link to explanation for instance, shadow, etc.
|
| <li>DataLoader, DataObject, etc.</ul>
|
| <li>Platform Manager needs to be mentioned in the context of installing
|
| in target platform.
|
| <li>Show how to add properties to the property sheet.
|
| <li>Mention the dummy template that you get, how to modify it,
|
| and how to set the description in the New File wizard.</ul></ul>
|
|
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 4
|
| </td>
|
| <td>
|
| 4 November 2005
|
| </td>
|
| <td>
|
| <ul><li>Added downloadable source code, new 'Installing the Sample' section, and link to
|
| Syntax Highlighting tutorial at the end.
|
| <li>To do:
|
| <ul> <li>Same items as on 4 October still to be done.</ul>
|
|
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 5
|
| </td>
|
| <td>
|
| 29 November 2005
|
| </td>
|
| <td>
|
| <ul><li>Added links to brand new Component Palette tutorial.
|
| <li>To do:
|
| <ul> <li>Same items as on 4 October still to be done.</ul>
|
|
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 6
|
| </td>
|
| <td>
|
| 21 April 2006
|
| </td>
|
| <td>
|
| <ul><li>Changed the title from "DataLoader Module Tutorial" to "Recognizing a File Type Tutorial".
|
| <li>To do:
|
| <ul> <li>Same items as on 4 October still to be done.</ul>
|
|
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 7
|
| </td>
|
| <td>
|
| 17 November 2007
|
| </td>
|
| <td>
|
| <ul><li>Updated the whole tutorial to 6.0, replaced all screenshots, and
|
| now [because the 6.0 IDE already provides support for manifest files], the
|
| tutorial focuses on imaginary Abc files.
|
| <li>To do:
|
| <ul> <li>Need to replace the download, which is the same as before, dealing with manifest files.
|
| <li>Same items as on 4 October still to be done.
|
| <li>Added OpenSupport into TopComponent, with a reference to Visual Library.</ul>
|
| <li>Changed title to File Type Integration Tutorial
|
| <li>Tweaked several places throughout tutorial, for 6.0
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 8
|
| </td>
|
| <td>
|
| 15 April 2008
|
| </td>
|
| <td>
|
| Updated the styles (badge, table of contents, required software table)
|
| to the new format.
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 9
|
| </td>
|
| <td>
|
| 16 July 2008
|
| </td>
|
| <td>
|
| Created new version for 6.5, because of changes to the
|
| way file type recognition is done in that release. To do:
|
| <ul>
|
| <li>6.5-specific badge
|
| <li>Required software table
|
| <li>Search for DataNode, BeanInfo, DataLoader and reword
|
| <li>Check screenshots
|
| <li>Make sure all the sections work as before
|
| </ul>
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 10
|
| </td>
|
| <td>
|
| 4 April 2009
|
| </td>
|
| <td>
|
| Worked through everything and added the multiview section.
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 11
|
| </td>
|
| <td>
|
| 9 Feb 2010
|
| </td>
|
| <td>
|
| Changed JPanel to TopComponent in multiview section.
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 12
|
| </td>
|
| <td>
|
| 10 Feb 2010
|
| </td>
|
| <td>
|
| Added links to javadoc for the MultiView classes.
|
| </td>
|
| </tr>
|
| <tr>
|
| <td>
|
| 13
|
| </td>
|
| <td>
|
| 18 Feb 2010
|
| </td>
|
| <td>
|
| Added style for borders and fixed action instructions.
|
| </td>
|
| </tr>
|
| </tbody>
|
| </table>
|
| -->
|
| </body>
|
| </html>
|