swingでメニューを表示するサンプルです。

ポイント

  • JMenuBarにJMenuを追加、JMenuにJMenuItemを追加という工程を重ねてメニューを作ります。
  • メニューをクリックして何かするには、アクションリスナーを設定します。
  • File(F)みたいな使い方はsetMnemonic('F')って書きます。
  • (F)は自分で書きます。setMnemonic('F')したからって自動的に(F)は付きません。
  • setIconでアイコンも設定でます。

実行結果


ソース MenuTest.java

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.plaf.metal.MetalIconFactory;
 
// メニューのテスト
// ・JMenuBarにJMenuを追加、JMenuにJMenuItemを追加という工程を重ねてメニューを作ります。
// ・メニューをクリックして何かするには、アクションリスナーを設定します。
// ・File(F)みたいな使い方はsetMnemonic('F')って書きます。
// ・(F)は自分で設定する。setMnemonic('F')したからって自動的に(F)は付きません。
// ・setIconでアイコンも設定でます。
public class MenuTest extends JFrame implements ActionListener {
 
	public static void main(String[] args) {
		new MenuTest();
	}
 
	public MenuTest() {
		init();
	}
 
	private void init() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("メニューのテスト中");
		setBounds(100, 100, 200, 100);
 
		JMenuBar mb = new JMenuBar();
		JMenu m = new JMenu("メニュー(M)");
		m.setMnemonic('M');
		// 意味もなくアイコンを設定
		m.setIcon(MetalIconFactory.getFileChooserHomeFolderIcon());
		JMenuItem item1 = new JMenuItem("閉じる(C)");
		item1.setMnemonic('C');
		// アクションの実装方法1 無名のアクションリスナーを直接突っ込む
		item1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
		m.add(item1);
		mb.add(m);
 
		// JMenuにJMenuを追加して、メニューに階層を作ることもできます
		JMenu subMenu = new JMenu("閉じる?");
		// アクションの実装方法2 メニューに名前を設定し、アクションリスナーを実装したクラスで名前を判定して挙動を制御する
		// こっちを多用する方がいいのかも
		JMenuItem item2 = new JMenuItem("閉じる");
		item2.setName("menu.close");
		item2.addActionListener(this);
		JMenuItem item4 = new JMenuItem("閉じない");
		subMenu.add(item4);
		subMenu.add(item2);
		m.add(subMenu);
		setJMenuBar(mb);
		setVisible(true);
	}
 
	@Override
	public void actionPerformed(ActionEvent e) {
		// インスタンス判定
		// setName/getNaemはComponentで実装してるのでComponentかどうか判定
		if (e.getSource() instanceof Component) {
			Component c = (Component) e.getSource();
			// 名前を取得
			String name = c.getName();
			// 名前で判定
			if ("menu.close".equals(name)) {
				System.exit(0);
			}
		}
	}
}
 

アフィリエイト

ここまで

最終更新:2012年09月22日 13:59