2008年6月19日木曜日

ドロップダウンボタンを作る

モジュール開発でのドロップダウンボタンの作り方です
ドロップダウンボタンとはボタンそのもののも機能を持ちつつ、ボタンの一部をクリックするとメニューが出てくるというボタンです
NetBeans ではデバッガやプロファイラのツールボタンなどがそれにあたります

NetBeans Wiki や Geertjan の blog でもドロップダウンメニューに関する記述はあるのですが、ボタンからのアクションの実装方法については触れていなかったので、簡単に説明したいと思います

まず、適当にモジュール開発プロジェクトを作成し、ツールバーにボタンを表示するためのアクションを作成します


例では CallableSystemAction を選択します


大域ツールバーボタンをチェックし、表示する位置を指定します


適当にアクション名、表示名、アイコンなどを設定します


これら、アクションを使ったツールバーボタンの作成に関しては公式チュートリアル「NetBeans Google ツールバーモジュールのチュートリアル」に詳しくありますので、そちらも参照下さい

以上でツールバーボタンの雛形はできました
これから実際にコードを記述する前に今回必要なライブラリを追加します
プロジェクトのプロパティからライブラリを選択し、以下と同様になるようライブラリを追加します
(Utilities API はアクション作成時に自動的に登録されるはずなので、 UI Utilities API と Dialogs API を追加して下さい)

次にボタンをクリックされる際に実行されるコードを書きます
(今回は簡単にダイアログを表示するだけの機能としています)
performAction() メソッドを以下のように実装します
    public void performAction() {
String message = "Drop-Down ボタンサンプルプログラム";

// ダイアログ表示
DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message(message, NotifyDescriptor.INFORMATION_MESSAGE));
}


次はドロップダウンメニューを表示するコードを書きます
getToolbarPresenter() メソッドをオーバーライドし、以下のように実装します
    @Override
public Component getToolbarPresenter() {
// ドロップダウンメニューの項目名
String[] names = {"Item#1", "Item#2", "Item#3", "Item#4", "Item#5"};

// ドロップダウンメニューの実装
JPopupMenu dropdownPopup = new JPopupMenu();
ButtonGroup buttonGroup = new ButtonGroup();

for (String name : names) {
JCheckBoxMenuItem item = new JCheckBoxMenuItem(name);
item.setName(name);
buttonGroup.add(item);
dropdownPopup.add(item);
}

// ドロップダウンメニューボタンの生成
JButton dropdownButton = DropDownButtonFactory.createDropDownButton(
new ImageIcon(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB)),
dropdownPopup);
// アクションとの関連づけ
Actions.connect(dropdownButton, (Action) this);

return dropdownButton;
}


以下が各部分の説明です
        // ドロップダウンメニューボタンの生成
JButton dropdownButton = DropDownButtonFactory.createDropDownButton(
new ImageIcon(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB)),
dropdownPopup);
DropDownButtonFactory クラスは createDropDownButton() メソッドにて、小さな矢印アイコンを持ち、クリック時に設定したポップアップメニューを表示するボタンを生成します

        // アクションとの関連づけ
Actions.connect(dropdownButton, (Action) this);
Actions クラスはメニューやツールバー操作のサポートクラスで、 connect() メソッドを使い、ボタンやメニューアイテムなどとアクションを関連づける事ができます

以上で実装は完了なので、実行して動作を確認します
ボタンをクリックすると、ダイアログが表示されます


次に矢印部分をクリックするとポップアップメニューが表示されます


元ネタは前述のプロファイラのボタンですが、プロファイラの場合は Action と Presenter.Toolbar インターフェイスを実装して作っています
参考になる部分が多いので、作成する際には ProfilerToolbarDropdownActionクラスのコードリーディングをお勧めします

2008年6月18日水曜日

NetBeans ブログコンテストのTシャツ

先日行われました NetBeans IDE 6.1 Blogging Contest にて入賞しました
(入賞したエントリーはコレになります)

そして、その賞品としてTシャツが届きました
(TシャツのみでCD-ROMは無かったッス)
Tシャツのデザインですが、表がこんな感じです


裏がこんな感じです


画像はサイズ調整以外何もしていないので、見づらいかもしれませんがご了承下さい

しばらくはモジュール開発に関してのエントリーが続く予定です
相変わらず不定期ですが、今後も宜しくお願い致します

2008年6月16日月曜日

画像を重ねる

更新が滞っていたので、小ネタながら書きます

モジュール開発にて、アイコンを表示する事が多くあるかと思います
基本的には事前にドットエディタや画像編集ソフトで準備したものを使用しますが、状況に応じ、複数の画像を動的に重ねて表示したい場合があります
以下のような感じです
※実際に NetBeans で使われているこの画像は既に合成されたものが使用されており、以下は説明用に別途分けたものです

+ =

これを実現するには Utilities API の ImageUtilities.mergeImages() メソッドを使い、下記のように書きます

// 結合する画像1、2の読み込み
Image fieldImage = ImageUtilities.loadImage("field_16.png");
Image keyBadgeImage = ImageUtilities.loadImage("key_badge.png");

// 画像合成
Image mergedImage = ImageUtilities.mergeImages(fieldImage, keyBadgeImage, 0, 0);

頻繁に変更される場合以外は多少ファイル数が増えても事前に合成済の画像を表示する方が(当然ながら)処理は早いので、上記処理は使いどころを考える必要はあります
しかし、面倒な画像処理を省いて簡単に実現できるので、機会があれば是非お試し下さい

2008年6月7日土曜日

とりあえず作ってみた

テスト系の機能不足に耐えられなくなったので、勢いだけで作ってみました
もろ eclipse からパクってます
(各ボタンのほとんど未実装ですが…)

取り敢えずはテスト単体での結果表示までは動作している状態です

ここで大きな問題となる 2 点ありまして…
1. プラグイン名は何にするのか?
2. NetBeans の UI にどう合わせるか(実現するのか)?

技術的な問題も山積みですが、上記に関してアドバイスがありましたら、宜しくお願い致します

2008年6月5日木曜日

NetBeans IDE 6.1 日本語版リリース

NetBeans IDE 6.1 日本語版(正確には多言語版)がリリースされました
翻訳作業、お疲れさまでした
今回は数字上はマイナーバージョンアップでしたが、かなりの変更がありましたので、大変だったかと思います
開発ビルドでの日本語版はあまり試せませんでしたが、何か気付いたら報告したいと思います
(まだ、英語版を使う事情があるので、今回はキャプチャはなしです)