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クラスのコードリーディングをお勧めします

0 件のコメント: