FeaturesPluginsDocs & SupportCommunityPartners

NetBeans アナグラムゲームモジュールのチュートリアル

フィードバック

このチュートリアルは NetBeans ウィンドウ API について説明します。このチュートリアルではアナグラムゲームを IDE に組み入れたり合体させる方法を紹介しています。トップコンポーネントはひとつの単体のウィンドウに相当しますが、同じようにそれはウィンドウの一つのタブに相当します。合体させたり切り離したり、ノードを選択したり、アクションを提供したり他の機能をサポートしたりできます。技術的な詳細は NetBeans API リストTopComponent クラス を参照してください。

このチュートリアルでは以下のことを説明します:

このチュートリアルはソフトウェアがインストールできれば 45 分程度で完了します。

プラグインモジュール開発に関する詳細は NetBeans サイトの NetBeans Development Project home をご覧下さい。わからないところがあれば NetBeans Developer FAQ をご覧下さい。またこのページの「フィードバック」リンクを使ってください。


ソフトウェアのインストール

まずはじめにコンピュータにソフトウェアをインストールします:

サンプルのインストール

次の手順でサンプルをインストールします:

  1. サンプルファイル を展開 (unzip) します。

  2. IDE の「ファイル」>「プロジェクトを開く」を選択し、解凍したファイルがあるフォルダまで移動します。モジュールプロジェクトを開きます。プロジェクトを開くと次のようになります:

    すべてのソースファイル

  3. プロジェクトノードを右クリックし「ターゲットプラットフォームでのインストール/再読み込み」を選びます。ターゲットプラットフォームが開きモジュールがインストールされます。

    新規メニューが追加されます:

    インストールメニュー

  4. 新規メニューを選択します。アナグラムゲームが開かれ「プロジェクト」、「ファイル」、「実行時」ウィンドウと同じところに「エクスプローラ」ウィンドウとして合体します。

  5. ゲームをします。

最終的な結果がどのようになるかわかったので、スクラッチからモジュールを作り作成の過程でそれぞれの部分を勉強してみましょう。


プロジェクトの設定

モジュールプロジェクトの作成

  1. 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択してください。「カテゴリ」で「NetBeans プラグインモジュール」を選択します。「プロジェクト」では「モジュールプロジェクト」を選択し「次へ」ボタンをクリックします。
  2. 「名前と場所」パネルでは「プロジェクト名」に「AnagramPlugin」と入力します。「プロジェクトの場所」は適当なディレクトリを指定します。たとえば c:\mymodules などです。「スタンドアロンモジュール」のラジオボタンはそのままにし「主プロジェクトとして設定」チェックボックスを選択します。「次へ」をクリックします。

  3. 「基本モジュール構成」パネルでは「コード名ベース」で com.toy.anagrams と入力します。「地域対応のバンドル」と「XML レイヤー」はそのままにし org/toy/anagrams にこれらのファイルが保存されるようにします。「完了」ボタンをクリックします。

    IDE は AnagramPlugin プロジェクトを作成します。プロジェクトは必要なすべてのソースやメタデータ、たとえばプロジェクトの構築スクリプトなどを含んでいます。プロジェクトは IDE 上で開かれます。「プロジェクト」ウィンドウ(Ctrl-1) で理論的な構成を表示できます。また「ファイル」ウィンドウ(Ctrl-2)ではファイル構造を表示できます。たとえば「プロジェクト」ウィンドウではこのようになります:

    初期の「プロジェクト」ウィンドウ

    これらのファイルの基本的な説明は NetBeans プラグインモジュールクイックスタートガイド を参照してください。

アナグラムゲームモジュールの再実装

次に IDE で提供されている NetBeans アナグラムゲームを使用します。プロジェクトを開いたら JFrame を使用しているクラスを変更します。JComponent を使用する必要があります。次のセクションではT TopComponent クラスを拡張したクラスと CallableSystemAction を拡張したアクションを追加します。

  1. 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択してください。「カテゴリ」で「サンプル」を選択し、次に「一般」を選択します。「プロジェクト」では「Anagram Game」を選択し「次へ」ボタンをクリックします。すべてデフォルトの設定を使用し「完了」ボタンをクリックします。
  2. AnagramGame ノードを展開し「ソースパッケージ」ノードを展開します。マウスを使って「com.toy.angrams.lib」パッケージと「com.toy.angrams.ui」 パッケージを「AnagramPlugin」ノードのソースパッケージにドラッグします。これで「プロジェクト」ウィンドウはこのようになります:

    初期の「プロジェクト」ウィンドウ

  3. com.toy.anagrams.ui」 パッケージを展開して「Anagrams.java」を右クリックしメニューから「削除」を選択します。ここ からダウンロードしたコンポーネント化された「Anagrams.java」を「com.toy.anagrams.ui」パッケージの中に置きます。

    コンポーネント化されたバージョンと元の Anagrams.java の違いは次の通りです:

    • コンポーネント化された Anagrams.javaJFrame ではなく JComponent を使用しています。
    • コンポーネント化された Anagrams.java にはメニューバーがありません。合体させるコンポートはメニューバーをサポートしていません。
    • exitMenuItemActionPerformed」 と 「exitForm」 はコンポーネント化された Anagrams.java にはありません。アナグラムゲームは IDE とともに終了されます。

    IDE の機能を使ってコンポーネント化された Anagrams.java と元のファイルの差分を見ることができます。差分を参照するにはアナグラムゲームプロジェクトをもう一度作成し二つの Anagrams.java を選択し右クリックのメニューから「ツール」>「差分」を選択します。


アナグラムゲームモジュールの合体

ウィンドウコンポーネントウィザードの使用

  1. AnagramPlugin プロジェクトノードで右クリックして「新規」>「ウィンドウコンポーネント」を選択します。「次へ」をクリックします。

  2. 「基本設定」パネルでは「explorer」を選び「アプリケーション起動時に開く」を選択します。

    「基本設定」パネルはこのようになります:

    Window コンポーネントウィザード、ステップ1

    「次へ」をクリックします。

  3. 「名前と場所」パネルでは「クラス名」に「AnagramGame」と入力し、16x16 ピクセルのイメージファイルを新しいファイルの種類のアイコンとして参照します。

    Window コンポーネントウィザード、ステップ2

    NetBeans のインストールディレクトリにはいろいろな 16x16 ピクセルのイメージファイルがあります。例えば次の場所にあります:

    enterprise2\jakarta-tomcat-5.5.7\server\webapps\admin\images.

    このチュートリアルでは上記ディレクトリの Datasource.gif を使用します。これは次のようなアイコンです:Datasource.gif

  4. 「完了」ボタンをクリックします。

    これで「プロジェクト」ウィンドウはこのようになります:

    新規ウィンドウコンポーネントとプロジェクトウィンドウ

    IDE は「com.toy.anagrams」パッケージに 「AnagramGameTopComponent.java」を作成します。そのファイルをソースエディタで開きます。これは次のようになります。(関連する NetBeans API Javadoc へのリンクをクリックしてださい):

    package com.toy.anagrams;
    
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.beans.PropertyChangeEvent;
    import java.beans.PropertyChangeListener;
    import java.io.Serializable;
    import org.openide.util.NbBundle;
    import org.openide.util.RequestProcessor;
    import org.openide.util.Utilities;
    import org.openide.windows.TopComponent;
    
    /**
     * Top component which displays something.
     */
    final class AnagramGameTopComponent extends TopComponent {
    
        private static final long serialVersionUID = 1L;
    
        private static AnagramGameTopComponent instance;
    
        private AnagramGameTopComponent() {
            initComponents();
            setName(NbBundle.getMessage(AnagramGameTopComponent.class, "CTL_AnagramGameTopComponent"));
            setToolTipText(NbBundle.getMessage(AnagramGameTopComponent.class, "HINT_AnagramGameTopComponent"));
            setIcon(Utilities.loadImage("com/toy/anagrams/Datasource.gif", true));
        }
    
        /** 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.
         */
        //                           
        private void initComponents() {
    
            setLayout(new java.awt.BorderLayout());
    
        }
        //                         
    
    
        // Variables declaration - do not modify                     
        // End of variables declaration                   
    
        /**
         * Gets default instance. Don't use directly, it reserved for '.settings' file only,
         * i.e. deserialization routines, otherwise you can get non-deserialized instance.
         */
        public static synchronized AnagramGameTopComponent getDefault() {
            if (instance == null) {
                instance = new AnagramGameTopComponent();
            }
            return instance;
        }
    
        public int getPersistenceType() {
            return TopComponent.PERSISTENCE_ALWAYS;
        }
    
        public void componentOpened() {
            // TODO add custom code on component opening
        }
    
        public void componentClosed() {
            // TODO add custom code on component closing
        }
    
        /** replaces this in object stream */
        public Object writeReplace() {
            return new ResolvableHelper();
        }
    
        protected String preferredID() {
            return "AnagramGameTopComponent";
        }
    
        final static class ResolvableHelper implements Serializable {
            private static final long serialVersionUID = 1L;
            public Object readResolve() {
                return AnagramGameTopComponent.getDefault();
            }
        }
    
    }

    IDE は「AnagramGameAction.java」も作成します。このアクションクラスはウィンドウを開くためのものです(関連する NetBeans API Javadoc へのリンクをクリックしてださい):

    package com.toy.anagrams;
    
    import java.awt.event.ActionEvent;
    import javax.swing.AbstractAction;
    import javax.swing.ImageIcon;
    import org.openide.ErrorManager;
    import org.openide.util.NbBundle;
    import org.openide.util.Utilities;
    import org.openide.windows.TopComponent;
    import org.openide.windows.WindowManager;
    
    /**
     * Action which shows AnagramGame component.
     */
    public class AnagramGameAction extends AbstractAction {
    
        public AnagramGameAction() {
            putValue(NAME, NbBundle.getMessage(AnagramGameAction.class, "CTL_AnagramGameAction"));
            putValue(SMALL_ICON, new ImageIcon(Utilities.loadImage("com/toy/anagrams/Datasource.gif", true)));
        }
    
        public void actionPerformed(ActionEvent evt) {
            TopComponent win = WindowManager.getDefault().findTopComponent("AnagramGameTopComponent");
            if (win == null) {
                ErrorManager.getDefault().log(ErrorManager.WARNING, "Cannot find AnagramGame component.");
                return;
            }
            win.open();
            win.requestActive();
        }
    
    }

    IDE は layer.xml ファイルにアクションクラスをメニュー項目とツールバーボタンとして登録します:

    <filesystem>
       
        <folder name="Actions">
            <folder name="Window">
                <file name="com-toy-anagrams-AnagramGameAction.instance"/>
            </folder>
        </folder>
    
        <folder name="Menu">
            <folder name="Window">
                <file name="AnagramGameAction.shadow">
                    <attr name="originalFile" stringvalue="Actions/Window/com-toy-anagrams-AnagramGameAction.instance"/>
                </file>
            </folder>
        </folder>
    
        <folder name="Windows2">
            <folder name="Components">
                <file name="AnagramGameTopComponent.settings" url="AnagramGameTopComponent.xml"/>
            </folder>
            <folder name="Modes">
                <folder name="explorer">
                    <file name="AnagramGameTopComponent.wstcref" url="AnagramGameTopComponent_1.xml"/>
                </folder>
            </folder>
        </folder>
    
    </filesystem>

    AnagramGameTopComponent.java を開いて「デザイン」をクリックするとフォームエディタが開きます:

    フォームエディタ

    通常トップコンポーネントをデザインをするにはフォームエディタを使います。しかしこの場合はこのチュートリアルの最初でダウンロードしたコンポーネント化された Anagram.java クラスを再利用します。次のステップはこの方法を説明します。

  5. ソースエディタで次のメソッドを AnagramGameTopComponent.java に追加します:

    protected void initAnagrams(){
        new Anagrams(this);
    }

    次にコンストラクタを変更しこの新しいメソッドが呼ばれるようにします:

    private AnagramGameTopComponent() {
       initAnagrams();
       setName(NbBundle.getMessage(AnagramGameTopComponent.class, "CTL_AnagramGameTopComponent"));
       setToolTipText(NbBundle.getMessage(AnagramGameTopComponent.class, "HINT_AnagramGameTopComponent"));
       setIcon(Utilities.loadImage("com/toy/anagrams/Datasource.gif", true));
    }

    initAnagrams() を呼び出す行が次のようにエラーとしてアンダーラインがついています。これは関連するパッケージが宣言されていないからです。

    赤いアンダーライン

    ソースエディタで右クリックし「コードを再フォーマット」(Ctrl-Shift-F) を選択します。インポート文 com.toy.anagrams.ui.Anagrams がクラスの先頭に追加されます。

プラグインモジュールは完成しました。次はインストールして使ってみましょう。

モジュールの構築とインストール

IDE はモジュールの構築およびインストールに Ant 構築スクリプトを使用します。構築スクリプトはプロジェクトの作成時に作成されます。

NetBeans モジュールのインストール

  • 「プロジェクト」ウィンドウで「AnagramPlugin」プロジェクトを右クリックし「ターゲットプラットフォームでのインストール/再読み込み」を選びます。

    モジュールが構築されターゲットプラットフォームにインストールされます。ターゲットプラットフォームが起動し新規モジュールを試すことができます。デフォルトのターゲットプラットフォームとは IDE の現在のインスタンスで使用しているインストールです。モジュールを実行すると IDE のユーザーディレクトリとは別のテストユーザーディレクトリで実行されます。

モジュールの使用

  1. IDE のメニューバーには新しいメニューとメニュー項目が追加されているのがわかります。メニュー項目の右側には「myicon.gif」アイコンが表示されています:

    インストールメニュー

  2. メニュー項目を選択して「OpenAnagramAction.java」の「performAction」メソッドを呼び出します。「エクスプローラ」ウィンドウにアナグラムサンプルが追加されます。

    メニューを選択した結果

共有可能なモジュールバイナリの作成

  1. 「プロジェクト」ウィンドウで AnagramPlugin プロジェクトを右クリックし、「NBM を作成」を選択します。

    NBM ファイルが作成されます。「ファイル」ウィンドウ (Ctrl-2) で確認できます:

    共有可能な NBM

  2. メールなどで送付することにより他の人に配布、共有できます。

モジュールのアンインストール

  1. モジュールをインストールしたプラットフォームを終了します。
  2. 「プロジェクト」ウィンドウでプロジェクトのノードを右クリックし「生成物を削除」を選択します。これで IDE やプラットフォームにはモジュールはインストールされていません。

次のステップ

モジュールの開発と作成の詳細は次のリソースを参照してください:

NetBeans プラグインモジュールの開発と作成の詳細は次のリソースを参照してください:

バージョン

詳細な更新履歴は 原文の英文 をご覧下さい。このファイルはリビジョン 1.44 を翻訳しています。


Companion
Projects:
MySQL Database Server   Open JDK: an Open SourceJDK   GlassFish Community: an Open Source Application Server    Mobile & Embedded Community    Open Solaris   java.net - The Source for Java Technology Collaboration   Virtual Box - full virtualizer  Open ESB - The Open Enterprise Service Bus Powered by