「Java/swing/サンプル/ポップアップメニュー」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
右クリックでポップアップメニューを表示するサンプルです。
*** ポイント
+ ポップアップメニューは、JFrameの上に載せるコンポーネントに実装するのが一般的です。
+ ポップアップメニューはJPopupMenuにJMenuItemを追加して作ります
+ 右クリックを検知するにはaddMouseListenerでマウスリスナーを設定します
+ マウスクリックイベントはmouseClickedに届きます
+ マウスのどのボタンをクリックしてもmouseClickedに来るので、押されたボタンを判定します
+ 右クリックの判定ならSwingUtilities.isRightMouseButtonが便利です
+ e.getX() e.getY()を渡すと、ちょうどマウスでクリックしたところにメニューが出ます
*** 実行結果
|&ref(swing右クリックメニューのテスト1.png)|&ref(swing右クリックメニューのテスト2.png)|
|右クリックして~|メニューを選択、ダイアログが表示されました。|
*** ソース
#highlight(){{
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
// ポップアップメニューのテスト
// ポイント1 ポップアップメニューは、JFrameの上に載せるコンポーネントに実装するのが一般的です。
// なので今回はJFrameではなくJPanelのサブクラスで作ります
public class PopupMenuTest extends JPanel implements ActionListener,
MouseListener {
// ポップアップメニューをクラス変数に持ちます
JPopupMenu popupMenu = new JPopupMenu();
public static void main(String[] args) {
// JFrameを作り、基本的な設定をします
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setBounds(100, 100, 200, 100);
f.setTitle("右クリックメニューのテスト");
// コンテンツペインに今回作成したパネルを追加します。
f.getContentPane().add(new PopupMenuTest());
f.setVisible(true);
}
public PopupMenuTest() {
init();
}
// 初期化メソッド
private void init() {
// ポイント2 ポップアップメニューはJPopupMenuにJMenuItemを追加して作ります
// JMenuItemを作りJPopupMenuに追加します
JMenuItem i = new JMenuItem("右クリックメニューのテストi");
JMenuItem j = new JMenuItem("右クリックメニューのテストj");
// どのメニューが押されたか判断するために名前をつけます
i.setName("i");
j.setName("j");
// アクションリスナーを設定します
i.addActionListener(this);
j.addActionListener(this);
// ここでポップアップメニューにアイテムを追加します
popupMenu.add(i);
popupMenu.add(j);
// ポイント3 右クリックを検知するにはaddMouseListenerでマウスリスナーを設定します
addMouseListener(this);
}
// ActionListenerの実装メソッドです
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof Component) {
Component c = (Component) e.getSource();
String name = c.getName();
if ("i".equals(name)) {
JOptionPane.showMessageDialog(this, "選択されたのはiメニューです。");
}
if ("j".equals(name)) {
JOptionPane.showMessageDialog(this, "選択されたのはjメニューです。");
}
}
}
// MouseListenerインターフェイスの実装メソッドです
// ポイント4 マウスクリックイベントはmouseClickedに届きます
@Override
public void mouseClicked(MouseEvent e) {
// マウスクリックでここに来ます
// ポイント5 マウスのどのボタンをクリックしてもmouseClickedに来るので、押されたボタンを判定します
// ポイント6 右クリックの判定ならSwingUtilities.isRightMouseButtonが便利です
if (SwingUtilities.isRightMouseButton(e)) {
// ポップアップメニューを表示します。
// ポイント7 e.getX() e.getY()を渡すと、ちょうどマウスでクリックしたところにメニューが出ます
popupMenu.show(this, e.getX(), e.getY());
}
}
@Override
public void mousePressed(MouseEvent e) {
// マウスのボタンを押した時はここに来ます
// 今回は何もしないので空のメソッドにしておきます
}
@Override
public void mouseReleased(MouseEvent e) {
// マウスのボタンを離した時はここに来ます
// 今回は何もしないので空のメソッドにしておきます
}
@Override
public void mouseEntered(MouseEvent e) {
// マウスカーソルがコンポーネントの上にきた時にここに来ます
// 今回は何もしないので空のメソッドにしておきます
}
@Override
public void mouseExited(MouseEvent e) {
// マウスカーソルがコンポーネントの外にでた時にここに来ます
// 今回は何もしないので空のメソッドにしておきます
}
}
}}
*** アフィリエイト
#amazon2()
*** ここまで
右クリックでポップアップメニューを表示するサンプルです。
*** ポイント
+ ポップアップメニューは、JFrameの上に載せるコンポーネントに実装するのが一般的です。
+ ポップアップメニューはJPopupMenuにJMenuItemを追加して作ります
+ 右クリックを検知するにはaddMouseListenerでマウスリスナーを設定します
+ マウスクリックイベントはmouseClickedに届きます
+ マウスのどのボタンをクリックしてもmouseClickedに来るので、押されたボタンを判定します
+ 右クリックの判定ならSwingUtilities.isRightMouseButtonが便利です
+ e.getX() e.getY()を渡すと、ちょうどマウスでクリックしたところにメニューが出ます
*** 実行結果
|&ref(swing右クリックメニューのテスト1.png)|&ref(swing右クリックメニューのテスト2.png)|
|右クリックして~|メニューを選択、ダイアログが表示されました。|
*** ソース &ref(PopupMenuTest.java)
#highlight(){{
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
// ポップアップメニューのテスト
// ポイント1 ポップアップメニューは、JFrameの上に載せるコンポーネントに実装するのが一般的です。
// なので今回はJFrameではなくJPanelのサブクラスで作ります
public class PopupMenuTest extends JPanel implements ActionListener,
MouseListener {
// ポップアップメニューをクラス変数に持ちます
JPopupMenu popupMenu = new JPopupMenu();
public static void main(String[] args) {
// JFrameを作り、基本的な設定をします
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setBounds(100, 100, 200, 100);
f.setTitle("右クリックメニューのテスト");
// コンテンツペインに今回作成したパネルを追加します。
f.getContentPane().add(new PopupMenuTest());
f.setVisible(true);
}
public PopupMenuTest() {
init();
}
// 初期化メソッド
private void init() {
// ポイント2 ポップアップメニューはJPopupMenuにJMenuItemを追加して作ります
// JMenuItemを作りJPopupMenuに追加します
JMenuItem i = new JMenuItem("右クリックメニューのテストi");
JMenuItem j = new JMenuItem("右クリックメニューのテストj");
// どのメニューが押されたか判断するために名前をつけます
i.setName("i");
j.setName("j");
// アクションリスナーを設定します
i.addActionListener(this);
j.addActionListener(this);
// ここでポップアップメニューにアイテムを追加します
popupMenu.add(i);
popupMenu.add(j);
// ポイント3 右クリックを検知するにはaddMouseListenerでマウスリスナーを設定します
addMouseListener(this);
}
// ActionListenerの実装メソッドです
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof Component) {
Component c = (Component) e.getSource();
String name = c.getName();
if ("i".equals(name)) {
JOptionPane.showMessageDialog(this, "選択されたのはiメニューです。");
}
if ("j".equals(name)) {
JOptionPane.showMessageDialog(this, "選択されたのはjメニューです。");
}
}
}
// MouseListenerインターフェイスの実装メソッドです
// ポイント4 マウスクリックイベントはmouseClickedに届きます
@Override
public void mouseClicked(MouseEvent e) {
// マウスクリックでここに来ます
// ポイント5 マウスのどのボタンをクリックしてもmouseClickedに来るので、押されたボタンを判定します
// ポイント6 右クリックの判定ならSwingUtilities.isRightMouseButtonが便利です
if (SwingUtilities.isRightMouseButton(e)) {
// ポップアップメニューを表示します。
// ポイント7 e.getX() e.getY()を渡すと、ちょうどマウスでクリックしたところにメニューが出ます
popupMenu.show(this, e.getX(), e.getY());
}
}
@Override
public void mousePressed(MouseEvent e) {
// マウスのボタンを押した時はここに来ます
// 今回は何もしないので空のメソッドにしておきます
}
@Override
public void mouseReleased(MouseEvent e) {
// マウスのボタンを離した時はここに来ます
// 今回は何もしないので空のメソッドにしておきます
}
@Override
public void mouseEntered(MouseEvent e) {
// マウスカーソルがコンポーネントの上にきた時にここに来ます
// 今回は何もしないので空のメソッドにしておきます
}
@Override
public void mouseExited(MouseEvent e) {
// マウスカーソルがコンポーネントの外にでた時にここに来ます
// 今回は何もしないので空のメソッドにしておきます
}
}
}}
*** アフィリエイト
#amazon2()
*** ここまで