モジュール javafx.controls
パッケージ javafx.scene.control

クラスContextMenu

  • すべての実装されたインタフェース:
    Styleable, EventTarget, Skinnable

    @IDProperty("id")
    public class ContextMenu
    extends PopupControl

    メニュー・アイテムのObservableListを含むポップアップ・コントロール。 items ObservableListには任意のMenuItemタイプを挿入でき、そのサブクラスであるMenuMenuItemRadioMenuItemCheckMenuItemおよびCustomMenuItemも含めることができます。 任意のノードをメニューに挿入する必要がある場合、CustomMenuItemを使用できます。 この一般的なルールの1つの例外は、SeparatorMenuItemをセパレータの挿入に使用できることです。

    このクラスの一般的なユースケースは、コンテキスト・メニューを作成してユーザーに表示することです。 ContextMenuを使用してコンテキスト・メニューを作成するには、次の手順を実行します。

    
    final ContextMenu contextMenu = new ContextMenu();
    contextMenu.setOnShowing(new EventHandler<WindowEvent>() {
        public void handle(WindowEvent e) {
            System.out.println("showing");
        }
    });
    contextMenu.setOnShown(new EventHandler<WindowEvent>() {
        public void handle(WindowEvent e) {
            System.out.println("shown");
        }
    });
    
    MenuItem item1 = new MenuItem("About");
    item1.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent e) {
            System.out.println("About");
        }
    });
    MenuItem item2 = new MenuItem("Preferences");
    item2.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent e) {
            System.out.println("Preferences");
        }
    });
    contextMenu.getItems().addAll(item1, item2);
    
    final TextField textField = new TextField("Type Something");
    textField.setContextMenu(contextMenu);
    

    Control.setContextMenu(javafx.scene.control.ContextMenu)コンビニエンス・メソッドを使用すると、任意のコントロールにコンテキスト・メニューを設定できます。 前述の例では、コンテキスト・メニューがテキスト・フィールドの右Sideに表示されます。 また、次のように、コントロールにイベント・ハンドラを設定して、コンテキスト・メニューを起動することもできます。

    
    textField.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent e) {
            contextMenu.show(textField, Side.BOTTOM, 0, 0);
        }
    });
    
    Group root = (Group) scene.getRoot();
    root.getChildren().add(textField);
    

    この例では、ユーザーがButtonをクリックすると、コンテキスト・メニューが表示されます(このためには、前述の手順を実行するのではなく、MenuButtonコントロールを使用する必要があります)。

    前述のコード・サンプルに使用されているshow関数を使用すると、ContextMenuがテキスト・フィールドの真下に表示されることに注意してください。 Sideを変えると、想定どおりの結果を得ることができます。

    導入されたバージョン:
    JavaFX 2.0
    関連項目:
    MenuItemMenu
    • プロパティの詳細

      • onAction

        public final ObjectProperty<EventHandler<ActionEvent>> onActionProperty
        このContextMenu内に含まれるアイテムがアクティブ化されると通知されるコールバック関数。 現在の実装はすべての親メニューも通知するため、イベントのためにすべてのサブメニューをリスニングする必要はありません。
        関連項目:
        getOnAction()setOnAction(EventHandler)
    • コンストラクタの詳細

      • ContextMenu

        public ContextMenu()
        新しいContextMenuを作成します。
      • ContextMenu

        public ContextMenu​(MenuItem... items)
        特定のアイテムで初期化された新しいContextMenuを作成します。
        パラメータ:
        items - メニュー・アイテムのリスト
    • メソッドの詳細

      • setOnAction

        public final void setOnAction​(EventHandler<ActionEvent> value)
        プロパティonActionの値を設定します。
        プロパティの説明:
        このContextMenu内に含まれるアイテムがアクティブ化されると通知されるコールバック関数。 現在の実装はすべての親メニューも通知するため、イベントのためにすべてのサブメニューをリスニングする必要はありません。
      • getOnAction

        public final EventHandler<ActionEvent> getOnAction()
        プロパティonActionの値を取得します。
        プロパティの説明:
        このContextMenu内に含まれるアイテムがアクティブ化されると通知されるコールバック関数。 現在の実装はすべての親メニューも通知するため、イベントのためにすべてのサブメニューをリスニングする必要はありません。
      • onActionProperty

        public final ObjectProperty<EventHandler<ActionEvent>> onActionProperty()
        このContextMenu内に含まれるアイテムがアクティブ化されると通知されるコールバック関数。 現在の実装はすべての親メニューも通知するため、イベントのためにすべてのサブメニューをリスニングする必要はありません。
        関連項目:
        getOnAction()setOnAction(EventHandler)
      • getItems

        public final ObservableList<MenuItem> getItems()
        コンテキスト・メニューのメニュー・アイテム。 このObservableListが実行時に変更された場合、ContextMenuは想定どおりに更新されます。
        戻り値:
        このコンテキスト・メニューのメニュー・アイテム
        関連項目:
        MenuItem
      • show

        public void show​(Node anchor,
                         Side side,
                         double dx,
                         double dy)
        hposおよびvposパラメータで指定された側と、x軸およびy軸それぞれの特定のdxおよびdy値によるオフセットに基づいて、特定のアンカー・ノードに対して相対的にContextMenuを表示します。 十分な領域がない場合、メニューは反対側に移動し、オフセットは適用されません。

        hposパラメータおよびvposパラメータの目的を明確にするには、これらがアンカー・ノードに対して相対的であることを考慮します。 したがって、CENTERhposおよびvposは、ContextMenuがアンカーの上に表示され、ContextMenuの(0,0)位置がアンカーの(0,0)に配置されることを表します。 右のhposContextMenuをシフトして、その左上(0,0)位置がアンカーの右上位置にアタッチされるようにします。

        この関数は、親ノードに対して相対的にメニューの位置を微調整し、詳細に位置合せする場合に便利です。

        パラメータ:
        anchor - アンカー・ノード
        side - サイド
        dx - x軸のdx値
        dy - y軸のdy値
      • show

        public void show​(Node anchor,
                         double screenX,
                         double screenY)
        指定された画面座標にContextMenuを表示します。 指定された場所に、サイズ要件のあるContextMenuを表示するための十分な領域がない場合は、ContextMenuを画面に戻すために必要な調整が行われます。 また、このことは、ContextMenuが複数のモニターにまたがらないことも意味します。
        オーバーライド:
        show 、クラス: PopupWindow
        パラメータ:
        anchor - アンカー・ノード
        screenX - 画面座標におけるアンカーのx位置
        screenY - 画面座標におけるアンカーのy位置
      • hide

        public void hide()
        この関数が呼び出されたときにContextMenuが表示されていたと想定し、このContextMenuおよび表示可能なサブメニューを非表示にします。

        このContextMenuが表示されていない場合は、何も実行されません。

        オーバーライド:
        hide 、クラス: PopupWindow