右クリックでポップアップメニューを表示するサンプルです。
ポイント
- ポップアップメニューは、JFrameの上に載せるコンポーネントに実装するのが一般的です。
- ポップアップメニューはJPopupMenuにJMenuItemを追加して作ります
- 右クリックを検知するにはaddMouseListenerでマウスリスナーを設定します
- マウスクリックイベントはmouseClickedに届きます
- マウスのどのボタンをクリックしてもmouseClickedに来るので、押されたボタンを判定します
- 右クリックの判定ならSwingUtilities.isRightMouseButtonが便利です
- e.getX() e.getY()を渡すと、ちょうどマウスでクリックしたところにメニューが出ます
実行結果
 |
 |
右クリックして~ |
メニューを選択、ダイアログが表示されました。 |
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) {
// マウスカーソルがコンポーネントの外にでた時にここに来ます
// 今回は何もしないので空のメソッドにしておきます
}
}
アフィリエイト
ここまで
最終更新:2012年09月22日 11:27