メニューバー、メニュー、メニューアイテムの作成

広告

フレームにメニューを追加する方法を見ていきます。

メニューバー、メニュー、メニューアイテムの作成

Swingにおいてメニューを作成するには、メニューバー、メニュー、メニューアイテムを作成する必要があります。まずはそれぞれの役割と作成方法を順に確認していきます。

メニューバーの作成

メニューバーはメニューを配置する場所です。下記の図の赤い四角の部分がメニューバーとなります。

メニューバー、メニュー、メニューアイテムの作成

メニューバーを作成するにはJMenuBarクラスを使用します。JMenuBarクラスは次のように定義されています。

public class JMenuBar
extends JComponent implements Accessible, MenuElement
java.lang.Object
 L java.awt.Component
     L java.awt.Container
         L javax.swing.JComponent
             L javax.swing.JMenuBar

メニューバーはコンポーネントの親クラスであるJComponentクラスのサブクラスとなっています。

JMenuBarクラスを利用するにはコンストラクタを使ってJMenuBarクラスのオブジェクトを作成します。どのようなコンストラクタが用意されているか確認してみます。

コンストラクタの概要
JMenuBar()
新しいメニューバーを作成します。

コンストラクタは1つだけ用意されており次のように定義されています。

新しいメニューバーを作成します。 

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

JMenuBar menubar = new JMenuBar();

メニューの作成

実際の動作を表すメニューアイテムを目的別に分類し、分類されたメニューアイテムの一覧を開くための各分類毎に付けられた見出しがメニューです。下記の図の赤い四角の部分がメニューとなります。

メニューバー、メニュー、メニューアイテムの作成

メニューを作成するにはJMenuクラスを使用します。JMenuクラスは次のように定義されています。

public class JMenu
extends JMenuItem implements Accessible, MenuElement
java.lang.Object
 L java.awt.Component
     L java.awt.Container
         L javax.swing.JComponent
             L javax.swing.AbstractButton
                 L javax.swing.JMenuItem
                     L javax.swing.JMenu

メニューはコンポーネントの親クラスであるJComponentクラスのサブクラスとなっています。またボタン全般の親クラスであるAbstractButtonクラスのサブクラスです。またメニューアイテムを表すJMenuItemクラスのサブクラスでもあります。

JMenuクラスを利用するにはコンストラクタを使ってJMenuクラスのオブジェクトを作成します。どのようなコンストラクタが用意されているか確認してみます。

コンストラクタの概要
JMenu()
テキストのない新しい JMenu を作成します。
JMenu(Action a)
指定された Action からプロパティーを取得するメニューを作成します。
JMenu(String s)
指定された文字列をテキストとして持つ新しい JMenu を作成します。
JMenu(String s, boolean b)
指定された文字列をテキストとして持ち、ティアオフメニューかどうかを指定された、新しい JMenu を作成します。

いくつかコンストラクタは用意されていますが、基本的に使用するコンストラクタは3番目のものです。次のように定義されています。

指定された文字列をテキストとして持つ新しい JMenu を作成します。

パラメータ:
  s - メニューラベルのテキスト

引数にはメニューに表示されるテキストを表すStringクラスのオブジェクトを指定します。

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

JMenu menu1 = new JMenu("File");
JMenu menu2 = new JMenu("Edit");

メニューアイテムの作成

メニューをクリックした時に表示されるのがメニューアイテムです。メニューアイテムは利用者がメニューによって何を行いたいのかに合わせて一つ一つ用意されており、メニューアイテムを最終的にクリックすることで目的の動作を行います。下記の図の赤い四角の部分がメニューアイテムとなります。

メニューバー、メニュー、メニューアイテムの作成

メニューを作成するにはJMenuItemクラスを使用します。JMenuItemクラスは次のように定義されています。

public class JMenuItem
extends AbstractButton implements Accessible, MenuElement
java.lang.Object
 L java.awt.Component
     L java.awt.Container
         L javax.swing.JComponent
             L javax.swing.AbstractButton
                 L javax.swing.JMenuItem

メニューはコンポーネントの親クラスであるJComponentクラスのサブクラスとなっています。またボタン全般の親クラスであるAbstractButtonクラスのサブクラスです。

JMenuItemクラスを利用するにはコンストラクタを使ってJMenuItemクラスのオブジェクトを作成します。どのようなコンストラクタが用意されているか確認してみます。

コンストラクタの概要
JMenuItem()
テキストおよびアイコンを指定しないで JMenuItem を作成します。
JMenuItem(Action a)
指定された Action からプロパティーを取得するメニュー項目を作成します。
JMenuItem(Icon icon)
指定されたアイコンで JMenuItem を作成します。
JMenuItem(String text)
指定されたテキストで JMenuItem を作成します。
JMenuItem(String text, Icon icon)
指定されたテキストおよびアイコンで JMenuItem を作成します。
JMenuItem(String text, int mnemonic)
指定されたテキストおよびキーボードニーモニックで JMenuItem を作成します。

コンストラクタではメニューアイテムに文字列だけを表示するのかアイコンだけも表示するのかによっていくつか用意されています。ここでは基本となる4番目のコンストラクタを確認します。

指定されたテキストで JMenuItem を作成します。

パラメータ:
  text - JMenuItem のテキスト

引数にはメニューアイテムに表示されるテキストを表すStringクラスのオブジェクトを指定します。

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

JMenuItem menuitem1 = new JMenuItem("New");
JMenuItem menuitem2 = new JMenuItem("Open");
JMenuItem menuitem3 = new JMenuItem("Close");

フレームにメニューバーを追加する

細かい使い方は次のページ以降で順に確認していきますが、メニューバーを作成後にフレームに追加する方法だけここで確認しておきます。メニューバーをフレームに追加するには、JFrameクラスで定義されているsetJMenuBarメソッドを使います。

このフレームのメニューバーを設定します。 

パラメータ:
  menubar - フレーム内に配置されているメニューバー

引数にはフレームに追加するメニューバーを表すJMenuBarクラスのオブジェクトを指定します。

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

JFrame frame = new JFrame();
JMenuBar menubar = new JMenuBar();

frame.setJMenuBar(menubar);

サンプルプログラム

では実際に試してみます。

SSample1_1.java

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import java.awt.Container;
import java.awt.BorderLayout;

class SSample1_1 extends JFrame{
  public static void main(String args[]){
    SSample1_1 frame = new SSample1_1("タイトル");
    frame.setVisible(true);
  }

  SSample1_1(String title){
    setTitle(title);
    setBounds(100, 100, 300, 250);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuBar menubar = new JMenuBar();

    JMenu menu1 = new JMenu("File");
    JMenu menu2 = new JMenu("Edit");

    menubar.add(menu1);
    menubar.add(menu2);

    JMenuItem menuitem1 = new JMenuItem("New");
    JMenuItem menuitem2 = new JMenuItem("Open");
    JMenuItem menuitem3 = new JMenuItem("Close");

    menu1.add(menuitem1);
    menu1.add(menuitem2);
    menu1.add(menuitem3);

    setJMenuBar(menubar);

    JPanel p = new JPanel();

    JButton button = new JButton("button");
    p.add(button);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }
}

ではコンパイルを行った上で実行してみます。

メニューバー、メニュー、メニューアイテムの作成

では"File"と書かれたメニューをクリックして下さい。次のようにポップアップメニューが開き、登録されているメニューアイテムの一覧が表示されます。

メニューバー、メニュー、メニューアイテムの作成

( Written by Tatsuo Ikura )