SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

モジュール作成のためのNetBeans API入門 第1回

NetBeansによるモジュール作成の体験

簡単なモジュールの作成

 それでは、モジュールを作成してみましょう。今回は、ウィンドウを表示してボタンを押したらメッセージを表示する簡単なモジュールを作成します。

テスト用NetBeansが立ち上がって実行
テスト用NetBeansが立ち上がって実行

プロジェクト

 NetBeansモジュールの作成は、まずモジュールプロジェクトの作成から始まります。

 メインメニューの[ファイル]-[新規プロジェクト]を選択して、[新規プロジェクト]ダイアログを開いてください。

 [新規プロジェクト]では[カテゴリ]に[NetBeansプラグインモジュール]を選択して、[プロジェクト]に[モジュールプロジェクト]を選択し、[次へ]ボタンを押してください。

[新規プロジェクト]ダイアログ
[新規プロジェクト]ダイアログ

 名前などを入力する画面になります。ここでは、プロジェクト名に「FirstModule」という名前をつけました。プロジェクトの場所は任意の場所を入力してください。このとき、プロジェクトの場所として指定する場所には、あらかじめフォルダが存在する必要があります。

 入力したら[次へ]ボタンを押してください。

モジュールプロジェクトウィザード:名前と場所
モジュールプロジェクトウィザード:名前と場所

 パッケージ名や生成するファイルを指定する画面になります。[コード名ベース]はパッケージになります。ここでは「first」という名前でパッケージ名を付けています。

 必要な項目を入力して[完了]ボタンを押すと、プロジェクトが生成されます。

モジュールプロジェクトウィザード:基本モジュール構成
モジュールプロジェクトウィザード:基本モジュール構成

 生成されたプロジェクトは次のようになっています。

作成されたプロジェクト
作成されたプロジェクト

ウィンドウの作成

 ウィンドウを作成します。プロジェクトエクスプローラーで[first]パッケージを右クリックして、メニューから[新規]-[ウィンドウコンポーネント]を選択し、ウィンドウコンポーネントを作成します。

 基本設定では、ウィンドウをどこに表示するか、起動時に表示するかを指定します。今回は[ウィンドウの位置]に[explorer]を指定してください。そうすると、プロジェクトツリーなどが表示されている領域にウィンドウが開かれます。

 必要な項目を入力したら[次へ]ボタンを押してください。

ウィンドウウィザード:基本設定
ウィンドウウィザード:基本設定

 [名前、アイコン、場所]では名前の接頭辞とアイコン、パッケージを指定します。今回はアイコンは指定しませんが、適当な画像ファイルがあれば指定してもかまいません。その場合は、PNG形式、JPEG形式、GIF形式のどれかである必要があります。

 [クラス名の接頭辞]には「Hello」と入力しておきます。そうすると、作成されるファイルの接頭辞になります。パッケージが「first」になっていることを確認したら[完了]ボタンを押すと、ウィンドウのためのファイルが生成されます。これらのファイルについては後で説明します。

ウィンドウウィザード:名前、アイコン、場所
ウィンドウウィザード:名前、アイコン、場所

 フォームデザイナが表示されるので、「JButton」を配置し、ダブルクリックしてテキストを入力してください。

ボタンコンポーネントを配置
ボタンコンポーネントを配置

 インスペクタ側でボタンをダブルクリックすると、ボタンを押したときの処理を入力するためのメソッドが生成されます。

インスペクタでJButtonコンポーネントをダブルクリック
インスペクタでJButtonコンポーネントをダブルクリック

 次のようなコードを入力してください。JOptionPaneでメッセージを表示します。

イベント処理の入力
イベント処理の入力

 WindowManager.getDefault().getMainWindow()は、NetBeansのウィンドウを取得しています。

実行

 それでは、実行させてみましょう。プロジェクトウィンドウでモジュールを右クリックして、メニューから[プロジェクトを実行]を選択すると、コンパイルが行われて実行がはじまります。

 このとき、テスト用のNetBeansが別に立ち上がって、そのなかでモジュールが実行されます。

 Helloウィンドウを表示させて[こんにちは]ボタンを押すと、メッセージが表示されます。

テスト用NetBeansが立ち上がって実行
テスト用NetBeansが立ち上がって実行

 メインメニューの[ウィンドウ]メニューには、[Helloウィンドウを開く]メニューが追加されています。Helloウィンドウを閉じたときに、このメニューからウィンドウを開きなおすことができます。

[ウィンドウ]メニューに[Helloウィンドウを開く]が追加されている
[ウィンドウ]メニューに[Helloウィンドウを開く]が追加されている

作成されたファイル

 ひととおりモジュールが作成できたので、作成されたファイルを見てみます。

 ここで作成されているファイルは次のようになっているはずです。ただしformファイルはNetBeans上からは見えません。

ファイル一覧
ファイル概要
Bundle.propertiesメッセージリソース
HelloAction.java「Helloウィンドウを開く」アクション。AbstractActionを継承したクラス。
HelloTopComponent.javaウィンドウのソース。TopComponentを継承したクラス。
HelloTopComponent.formウィンドウのコンポーネント配置。
HelloTopComponentSettings.xmlウィンドウのインスタンスを表す。
HelloTopCompontntWstcref.xmlウィンドウの表示状態を表す。
layer.xmlXMLレイヤーとして表示される設定ファイル。

 この中でモジュール作成特有のファイルについて、大まかに解説しましょう。

 「HelloTopComonentSettings.xml」は次のように、ウィンドウクラスがどのクラスとして扱えるか、インスタンス化のためのメソッドは何かなどを記述します。場合によってはシリアライズされた追加の属性も埋め込まれます。後述する「layer.xml」の中で「Windows2/Components」に配置されます。

HelloTopComponentSettings.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE settings PUBLIC "-//NetBeans//DTD Session settings 1.0//EN"
    "http://www.netbeans.org/dtds/sessionsettings-1_0.dtd">
<settings version="1.0">
    <module name="first" spec="1.0"/>
    <instanceof class="org.openide.windows.TopComponent"/>
    <instanceof class="first.HelloTopComponent"/>
    <instance class="first.HelloTopComponent" method="getDefault"/>
</settings>

 「HelloTopComponentWstcref.xml」ファイルは、ウィンドウがどのような状態かを示すファイルです。「layer.xml」の中で、「Windows2/Modes」の中のウィンドウが配置された場所に対応するフォルダに配置されます。今回はexplorerの中に配置されています。

 この「Mode」というのは「Docking Mode」の略ということです。

HelloTopComponentWstcref.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tc-ref PUBLIC 
    "-//NetBeans//DTD Top Component in Mode Properties 2.0//EN"
    "http://www.netbeans.org/dtds/tc-ref2_0.dtd">
<tc-ref version="2.0" >
    <module name="first" spec="1.0"/>
    <tc-id id="HelloTopComponent"/>
    <state opened="true"/>
</tc-ref>

layer.xmlとシステム・ファイルシステム

 「layer.xml」は、NetBeansのモジュールで最も重要なファイルです。XMLの形式としてはfolderの入れ子の中にattrを持ったfileが含まれる形式になっています。

layer.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.1//EN"
    "http://www.netbeans.org/dtds/filesystem-1_1.dtd">
<filesystem>
    <folder name="Actions">
        <folder name="Window">
            <file name="first-HelloAction.instance"/>
        </folder>
    </folder>
    <folder name="Menu">
        <folder name="Window">
            <file name="HelloAction.shadow">
                <attr name="originalFile"
                    stringvalue="Actions/Window/first-HelloAction.instance"/>
            </file>
        </folder>
    </folder>
    <folder name="Windows2">
        <folder name="Components">
            <file name="HelloTopComponent.settings"
                url="HelloTopComponentSettings.xml"/>
        </folder>
        <folder name="Modes">
            <folder name="explorer">
                <file name="HelloTopComponent.wstcref"
                    url="HelloTopComponentWstcref.xml"/>
            </folder>
        </folder>
    </folder>
</filesystem>

 この「layer.xml」の内容は、[重要なファイル]の[XMLレイヤー]のうちの[このレイヤー]として表示されます。

layer.xmlの内容がXMLレイヤーとして表示される
layer.xmlの内容がXMLレイヤーとして表示される

 [XMLレイヤー]の[コンテキスト内のこのレイヤー]では、NetBeans内のすべてのモジュールでの「layer.xml」を合成したものが表示されています。

 よく見てみると、メニューやパレットなど、NetBeansのすべての構成情報がこのツリーで表されていることが分かります。このツリーを「システム・ファイルシステム」と呼びます。

 NetBeansでの機能拡張はシステム・ファイルシステムを拡張することで行われ、設定変更はシステム・ファイルシステムを変更することで行われます。

NetBeans全体のレイヤー
NetBeans全体のレイヤー

 設定変更やウィンドウの状態によって変更されたシステム・ファイルシステムの情報は、ユーザーディレクトリの「config」フォルダにシステム・ファイルシステムの構造を反映したフォルダ構造で保存されます。

ユーザーディレクトリもレイヤーを反映したフォルダ構成になっている
ユーザーディレクトリもレイヤーを反映したフォルダ構成になっている

次のページ
他のモジュールに依存する機能を使ってみる

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

きしだ なおき(キシダ ナオキ)

フリーのプログラマ。Javaでの業務アプリケーションからC++での小型端末などさまざまなプログラムを開発。また、入門者向けのJavaセミナーなども行う。そのセミナーで鍛えられたテキストが、著書である「創るJava」。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/407 2006/06/06 00:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー