メニューバー

ここではGUIコンポーネントのメニューバーについて説明する。
このメニューバーは、JMenuBerというクラス名である。
まず『File』『View』の2つのメニューバーを作る。
JMenuBarのインスタンスを生成しておいて、JFrameのsetJMenuBar()メソッド
のパラメータに渡すことにより、タイトルバーの真下にメニューバーを付ける事ができる。
 これを元に作ると以下のプログラムになる。

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

class JMenuBarTest extends JFrame implements ActionListener {
	JMenuBarTest() {
		JMenuBar menuBar = new JMenuBar();
		JMenu menuFile = new JMenu("File");
		JMenu menuView = new JMenu("View");
		
		menuFile.setMnemonic('F');
		menuView.setMnemonic('V');
		
		getRootPane().setJMenuBar(menuBar);
		menuBar.add(menuFile);
		menuBar.add(menuView);
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("JMenuBarTest");
		setSize(250, 200);
		setVisible(true);
	}
	public void actionPerformed(ActionEvent e) {
		System.out.println("[" + e.getActionCommand() + "]");
	}
	public static void main(String[] args) {
		new JMenuBarTest();
	}
}

このプログラムの実行結果は以下になる。



これでメニューバーを作成した。次はWindowsと同じようにメニューバーにメニューをいれてみる。
JMenuに対して、メニュー項目(JMenuItem)を渡すことにより、プルダウンメニューを構成できる。

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

class JMenuBarTest extends JFrame implements ActionListener {
	JMenuBarTest() {
		JMenuBar menuBar = new JMenuBar();
		JMenu menuFile = new JMenu("File");
		JMenuItem menuOpen = new JMenuItem("Open");
		JMenuItem menuExit = new JMenuItem("Exit");
		JMenu menuView = new JMenu("View");
		JMenuItem menuTool = new JMenuItem("Tool Bar");
		JMenu menuSize = new JMenu("Size");

		menuFile.setMnemonic('F');
		menuOpen.setMnemonic('O');
		menuExit.setMnemonic('x');
		menuView.setMnemonic('V');
		menuTool.setMnemonic('T');
		menuSize.setMnemonic('S');

		menuOpen.addActionListener(this);
		menuExit.addActionListener(this);
		menuTool.addActionListener(this);

		getRootPane().setJMenuBar(menuBar);
		menuBar.add(menuFile);
		menuFile.add(menuOpen);
		menuFile.add(menuExit);
		menuBar.add(menuView);
		menuView.add(menuTool);
		menuView.add(menuSize);

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("JMenuBarTest");
		setSize(250, 200);
		setVisible(true);
	}
	public void actionPerformed(ActionEvent e) {
		System.out.println("[" + e.getActionCommand() + "]");
	}
	public static void main(String[] args) {
		new JMenuBarTest();
	}
}


このプログラムの実行結果は以下になる。



このメニューの選択は、全て同じ種類の「Actionイベント」を発生するため、どのメニューが選択されたか識別する為に
あらかじめ「コマンド名」を各メニューに設定しておくことができる。

ポップアップメニュー

ここではポップアップメニューのイベント処理をやっていく。ポップアップメニューは
マウスの右ボタンをクリックしたときにでてくるメニューである。
したがってマウスイベントの処理にも関係してきます。マウスイベント処理については
後ほどやりますので今回はこういうものだと覚えておく。
まずはポップアップメニューを作る。

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

class JPopupMenuTest extends JFrame implements ActionListener, MouseListener {
	JPopupMenu popup = new JPopupMenu();
	JPopupMenuTest() {
		JMenuItem menuA = new JMenuItem("menuA");
		JMenuItem menuB = new JMenuItem("menuB");
		menuA.addActionListener(this);
		menuB.addActionListener(this);
		popup.add(menuA);
		popup.add(menuB);

		getContentPane().addMouseListener(this);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("JPopupMenuTest");
		setSize(200, 100);
		setVisible(true);
	}
	public void actionPerformed(ActionEvent e) {
		System.out.println(e.getActionCommand());
	}
	public void mousePressed(MouseEvent e) {
		if (e.isPopupTrigger()) {
			popup.show(e.getComponent(), e.getX(), e.getY());
		}
	}
	public void mouseReleased(MouseEvent e) {
		if (e.isPopupTrigger()) {
			popup.show(e.getComponent(), e.getX(), e.getY());
		}
	}
	public void mouseClicked(MouseEvent e) {
	}
	public void mouseEntered(MouseEvent e) {
	}
	public void mouseExited(MouseEvent e) {
	}
	public static void main(String[] args) {
		new JPopupMenuTest();
	}
}


このプログラムの実行結果は以下になる。




この例で用いたポップアップメニューを出す為のマウスイベント処理の方法は、一般の委任イベントモデルとは異なっており、
内部で行われているイベント処理メソッドをオーバーライドして行う。
つまり、ポップアップメニューを出す処理は、自分で記述しなければならない。