Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのJPopupMenuで右クリックメニュー(コンテキストメニュー)を実装する方法

Java SwingのJPopupMenuを使うと、マウスの右ボタンがクリックされたタイミングで、画面上の任意の場所にポップアップメニュー(コンテキストメニュー)を表示できます。

JPopupMenuの基本

  • ポップアップメニューは、インボーカー(invoker)と呼ばれる基盤となるコンポーネントに関連付けられた自由配置型のメニューです。
  • 多くの場合、ポップアップメニューは特定のコンポーネントに紐付けられ、状況に応じた選択肢(コンテキスト依存の操作)を表示するために使用されます。
  • ポップアップメニューを作成するにはJPopupMenuクラスを使用し、通常のメニューと同じようにJMenuItemを追加できます。
  • メニューを表示するにはshow()メソッドを呼び出します。一般的にはマウスイベントへの反応として呼び出されます。

ポイント:isPopupTrigger()メソッド

受け取ったマウスイベントがポップアップメニューを表示すべきものかどうかを判定するには、MouseEventクラスのisPopupTrigger()メソッドを使用します。OSによって右クリックを検出するタイミング(mousePressed/mouseReleased)が異なるため、このメソッドを利用することでプラットフォームに依存しない実装が可能になります。

サンプルコード

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class JPopupMenuTest extends JFrame {
    private JPopupMenu popup;

    public JPopupMenuTest() {
        setTitle("JPopupMenu Test");
        Container contentPane = getContentPane();
        popup = new JPopupMenu();

        // ポップアップメニューに項目を追加
        popup.add(new JMenuItem("Cut"));
        popup.add(new JMenuItem("Copy"));
        popup.add(new JMenuItem("Paste"));
        popup.addSeparator();
        popup.add(new JMenuItem("SelectAll"));

        contentPane.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent me) {
                showPopup(me); // showPopup() は独自に定義したメソッド
            }
        });

        setSize(375, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    void showPopup(MouseEvent me) {
        if (me.isPopupTrigger())
            popup.show(me.getComponent(), me.getX(), me.getY());
    }

    public static void main(String args[]) {
        new JPopupMenuTest();
    }
}

実行結果

プログラムを実行してフレーム上で右クリックすると、「Cut」「Copy」「Paste」「SelectAll」の各項目を持つポップアップメニューが、クリックした位置に表示されます。

JavaのJPopupMenuで右クリックメニュー(コンテキストメニュー)を実装する方法

  1. JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説

    JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー

  2. JavaのJWindowを使ってスプラッシュ画面を実装する方法

    JWindowは、デスクトップ上の任意の位置に表示できるコンテナです。JFrameと異なり、タイトルバーやウィンドウ管理ボタンなどの装飾要素を持ちません。JWindowは、唯一の子クラスとしてJRootPaneを含んでいます。そのcontentPaneが、JWindowに追加される子コンポーネントの親となります。JFrameと同様に、JWindowもトップレベルコンテナの一つであり、「装飾のない(undecorated)JFrame」と考えることができます。タイトルバーやウィンドウメニューといった機能は備えていません。この特性を活かすと、JWindowはスプラッシュ画面として利用できます。アプ