swingでメニューを表示するサンプルです。
ポイント
- JMenuBarにJMenuを追加、JMenuにJMenuItemを追加という工程を重ねてメニューを作ります。
- メニューをクリックして何かするには、アクションリスナーを設定します。
- File(F)みたいな使い方はsetMnemonic('F')って書きます。
- (F)は自分で書きます。setMnemonic('F')したからって自動的に(F)は付きません。
- setIconでアイコンも設定でます。
実行結果
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