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のJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー
-
JavaのJWindowを使ってスプラッシュ画面を実装する方法
JWindowは、デスクトップ上の任意の位置に表示できるコンテナです。JFrameと異なり、タイトルバーやウィンドウ管理ボタンなどの装飾要素を持ちません。JWindowは、唯一の子クラスとしてJRootPaneを含んでいます。そのcontentPaneが、JWindowに追加される子コンポーネントの親となります。JFrameと同様に、JWindowもトップレベルコンテナの一つであり、「装飾のない(undecorated)JFrame」と考えることができます。タイトルバーやウィンドウメニューといった機能は備えていません。この特性を活かすと、JWindowはスプラッシュ画面として利用できます。アプ