階層化したメニューを作成する

広告

ポップアップメニューでもメニューアイテムの代わりにJMenuクラスのオブジェクトを追加することで階層化したメニューを作成することができます。詳しい解説は『JMenuクラス,JMenuBarクラス,JMenuItemクラス』を参照して下さい。

実際の使い方は次のようになります。

JPopupMenu popup = new JPopupMenu();

JMenuItem menuitem1 = new JMenuItem("進む");
JMenuItem menuitem2 = new JMenuItem("戻る");

JMenu submenu = new JMenu("サブメニュー");

JMenuItem submenuitem1 = new JMenuItem("サブメニュー1");
JMenuItem submenuitem2 = new JMenuItem("サブメニュー2");

submenu.add(submenuitem1);
submenu.add(submenuitem2);

popup.add(menuitem1);
popup.add(menuitem2);
popup.add(submenu);

popup.show(label, 10, 10);

サンプルプログラム

では簡単なサンプルを作成して試してみます。

JPopupMenuTest4.java

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

public class JPopupMenuTest4 extends JFrame implements MouseListener{

  JPopupMenu popup;

  public static void main(String[] args){
    JPopupMenuTest4 frame = new JPopupMenuTest4();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }

  JPopupMenuTest4(){
    JButton button = new JButton("button");

    JPanel p = new JPanel();
    p.addMouseListener(this);
    p.add(button);

    popup = new JPopupMenu();

    JMenuItem backMenuItem = new JMenuItem("戻る");
    JMenuItem forwardMenuItem = new JMenuItem("進む");

    JMenu updateMenu = new JMenu("自動更新");

    JMenuItem defaultMenuItem = new JMenuItem("標準の設定");
    JRadioButtonMenuItem fiveRadioitem = new JRadioButtonMenuItem("5秒");
    JRadioButtonMenuItem tenRadioitem = new JRadioButtonMenuItem("10秒");

    ButtonGroup group = new ButtonGroup();
    group.add(fiveRadioitem);
    group.add(tenRadioitem);

    updateMenu.add(defaultMenuItem);
    updateMenu.add(fiveRadioitem);
    updateMenu.add(tenRadioitem);

    popup.add(backMenuItem);
    popup.add(forwardMenuItem);
    popup.add(updateMenu);

    getContentPane().add(p, BorderLayout.CENTER);
  }

  public void mouseReleased(MouseEvent e){
    showPopup(e);
  }

  public void mousePressed(MouseEvent e){
    showPopup(e);
  }

  public void mouseClicked(MouseEvent e){}
  public void mouseEntered(MouseEvent e){}
  public void mouseExited(MouseEvent e){}

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

上記をコンパイルした後で実行すると次のように表示されます。

JPopupMenuで階層化したメニューを表示する

今回はパネルに対してマウスの右クリックを行うとポップアップメニューが表示されるように設定してあります。

JPopupMenuで階層化したメニューを表示する

JPopupMenuで階層化したメニューを表示する

今回はメニューアイテムの代わりにメニューを追加して階層化したメニューを表示するようにしました。また2階層目にはラジオボタン型のメニューアイテムも追加しています。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。