Adobe Flex 3 ヘルプ

Menu コントロール

Menu コントロールは、個別に選択できる選択肢のメニューを持つポップアップコントロールです。ユーザーの操作に対する応答として Menu コントロールを作成するには、ActionScript を使用します。通常、この処理はイベントリスナーの一部です。Menu コントロールは、イベントに対する応答として作成されるので、MXML タグを持ちません。Menu コントロールは、ActionScript でのみ作成できます。

詳細については、『Adobe Flex リファレンスガイド』を参照してください。

Menu コントロールについて

次の例は Menu コントロールです。

Menu ÉRÉìÉgÉçÅ[Éã

この例では、MenuItem A と MenuItem D というアイテムがあり、それぞれサブメニューが開きます。サブメニューは、ユーザーが親アイテムの上にマウスポインタを移動したとき、またはキーボードのキーを使用して親アイテムにアクセスしたときに開きます。

Menu コントロールのデフォルトの場所はアプリケーションの左上隅で、x 座標と y 座標はそれぞれ 0 です。x パラメータと y パラメータを show() メソッドに渡すと、アプリケーションを基準とした Menu コントロールの場所を制御できます。

開いたメニューは、ユーザーが有効なメニューアイテムを選択するか、ユーザーがアプリケーションの他のコンポーネントを選択するか、またはスクリプトによって閉じられるまで、表示されたままになります。

常に表示されている静的なメニューを作成するには、MenuBar コントロールまたは PopUpMenuButton コントロールを使用します。MenuBar コントロールの詳細については、MenuBar コントロールを参照してください。PopUpMenuButton コントロールの詳細については、PopUpMenuButton コントロールを参照してください。

Menu コントロールの作成

MXML タグでは Menu コントロールを作成できません。Menu コントロールは、ActionScript で作成する必要があります。

  1. ActionScript の静的な Menu.createMenu() メソッドを呼び出し、Menu コントロールを 2 番目のパラメータとして設定しているデータプロバイダのインスタンスをこのメソッドに渡して、Menu コントロールのインスタンスを作成します。次に例を示します。
    var myMenu:Menu = Menu.createMenu(null, myMenuData);
    
    

    (最初のパラメータには、オプションでメニューの親コンテナを指定できます。)

    データプロバイダのルートノードを表示しない場合、例えばデータプロバイダが E4X 形式の XML ドキュメントであれば、3 番目のパラメータに false の値を使用します。このパラメータによって、メニューの showRoot プロパティが設定されます。次の例では、データプロバイダのルートを表示しないメニューを作成します。

    var myMenu:Menu = Menu.createMenu(null, myMenuData, false);
    
    

注意: ルートノードを非表示にするには、createMenu メソッドの showRoot プロパティを設定する必要があります。メニューの作成後にこのプロパティを設定しても、適用されません。

  1. 次の例のように、ActionScript の Menu.show() メソッドを呼び出して、Menu のインスタンスを表示します。
    myMenu.show(10, 10);
    
    

注意: Menu.popUpMenu() メソッドで表示されたメニューは自動的には削除されないため、Menu オブジェクトに対して PopUpManager.removePopUp() メソッドを呼び出す必要があります。Menu オブジェクトは、show() メソッドによって自動的に表示リストに追加され、hide() メソッドによって自動的に表示リストから削除されます。メニューの外をクリックするか Esc キーを押しても、Menu オブジェクトは非表示になり、表示リストから削除されます。

例:単純な Menu コントロールの作成

この例では、<mx:XML> タグを使用して Menu コントロールのデータを定義します。また、Button コントロールを使用して、Menu コントロールを開くイベントをトリガします。

<?xml version="1.0"?>
<!-- menus/SimpleMenuControl.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >

    <mx:Script>
        <![CDATA[
            // Import the Menu control.
            import mx.controls.Menu;

            // Create and display the Menu control.
            private function createAndShow():void {
                var myMenu:Menu = Menu.createMenu(null, myMenuData, false);
                myMenu.labelField="@label";
                myMenu.show(10, 10);
            }
        ]]>
    </mx:Script>

    <!-- Define the menu data. -->
    <mx:XML format="e4x" id="myMenuData">
        <root>
            <menuitem label="MenuItem A" >
                <menuitem label="SubMenuItem A-1" enabled="false"/>
                <menuitem label="SubMenuItem A-2"/>
            </menuitem>
            <menuitem label="MenuItem B" type="check" toggled="true"/>
            <menuitem label="MenuItem C" type="check" toggled="false"/>
            <menuitem type="separator"/>     
            <menuitem label="MenuItem D" >
                <menuitem label="SubMenuItem D-1" type="radio" 
                    groupName="one"/>
                <menuitem label="SubMenuItem D-2" type="radio" 
                    groupName="one" toggled="true"/>
                <menuitem label="SubMenuItem D-3" type="radio" 
                    groupName="one"/>
            </menuitem>
        </root>
    </mx:XML>

    <mx:VBox>
        <!-- Define a Button control to open the menu -->
        <mx:Button id="myButton" 
            label="Open Menu" 
            click="createAndShow();"/>
    </mx:VBox>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

XML データ内のノードタグには、どのような名前でも割り当てられます。前の例では、汎用タグの <menuitem> を使用してノードに名前を付けていますが、<node><subNode><person><address> なども使用できます。

この例では E4X 形式の XML データソースを使用しているので、E4X @ 属性指定子シンタックスでラベルフィールドを指定し、データプロバイダのルートノードを非表示にするようコントロールに指示する必要があります。

type 属性など、Menu コントロールにとって意味のある属性またはフィールドがいくつかあります。Flex によるデータプロバイダのデータの解釈方法と使用方法については、メニュー項目情報の指定と使用を参照してください。

Menu コントロールのユーザー操作

Menu コントロールは、マウスまたはキーボードを使用して操作できます。クリックにより、メニューアイテムを選択したり、メニューを閉じたりできます。ただし、次のタイプのメニューアイテムは例外です。

無効なアイテムまたはセパレータ 

これらのアイテムの上にマウスを移動またはクリックしても、メニューは表示されたままになります。



サブメニューアンカー 

アイテムの上にマウスを移動するとサブメニューが開きますが、クリックしても何も変化しません。開いているサブメニューのアイテム以外のメニューアイテムの上にマウスを移動させると、サブメニューが閉じます。



Menu コントロールにフォーカスがある場合、次のキーを使用して制御できます。

キー

説明

↓(下向き矢印)

↑(上向き矢印)

メニュー行の下および上のアイテムを選択します。行の先頭からは末尾に、末尾からは先頭に選択が移動します。

→(右向き矢印)

サブメニューを開きます。メニューバーにフォーカスがある場合は、隣のメニューを選択します。

←(左向き矢印)

サブメニューを閉じてフォーカスを親メニューに戻します(親メニューがある場合)。または、メニューバーの前のメニューを選択します(メニューバーがある場合)。

Enter

サブメニューを開きます。サブメニューがない場合には、行をマウスでクリックしてボタンを離すのと同じ効果があります。

Esc

1 つのメニューレベルを閉じます。

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート