- Home ›
- Swing ›
- メニューの作成(JMenu,JMenuBar,JMenuItemクラス) ›
- HERE
階層化メニューの作成
メニューにはメニューアイテムを追加することができますが、メニューを表すJMenuクラスはメニューアイテムを表すJMenuItemクラスのサブクラスとなっておりメニューもメニューアイテムの一つと考えることができます。
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
そこでメニューの中にメニューアイテムと同じようにメニューを追加することが可能です。(ここでは分かりやすくするためにサブメニューと呼びます)。
メニューの中に追加されるサブメニューもメニューですので、メニューアイテムを追加することができます。またサブメニューの中にさらに別のメニューを追加することもできます。このような使い方をすることで階層化したメニューを作成することができます。
例えば一つのメニューを次のようにしたい場合で考えてみます。(サブメニューは[]で囲ってあります)。
New Open [Encode] UTF-8 Shift_JIS EUC Save Close
上記を実現するためには次のように記述します。
JMenu submenu = new JMenu("Encode");
JMenuItem submenuitem1 = new JMenuItem("UTF-8");
JMenuItem submenuitem2 = new JMenuItem("Shift_JIS");
JMenuItem submenuitem3 = new JMenuItem("EUC");
submenu.add(submenuitem1);
submenu.add(submenuitem2);
submenu.add(submenuitem3);
JMenu menu = new JMenu("File");
JMenuItem menuitem1 = new JMenuItem("New");
JMenuItem menuitem2 = new JMenuItem("Open");
JMenuItem menuitem3 = new JMenuItem("Save");
JMenuItem menuitem4 = new JMenuItem("Close");
menu.add(menuitem1);
menu.add(menuitem2);
menu.add(submenu);
menu.add(menuitem3);
menu.add(menuitem4);
今回は2階層だけですが、同じように何階層のメニューでも作成することができます。
サンプルプログラム
では実際に試してみます。
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import java.awt.Container;
import java.awt.BorderLayout;
class SSample19_1 extends JFrame{
JLabel label;
public static void main(String args[]){
SSample19_1 frame = new SSample19_1("タイトル");
frame.setVisible(true);
}
SSample19_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");
JMenu menu3 = new JMenu("Tool");
JMenu menu4 = new JMenu("Help");
menubar.add(menu1);
menubar.add(menu2);
menubar.add(menu3);
menubar.add(menu4);
JMenu submenu = new JMenu("Encode");
JMenuItem submenuitem1 = new JMenuItem("UTF-8");
JMenuItem submenuitem2 = new JMenuItem("Shift_JIS");
JMenuItem submenuitem3 = new JMenuItem("EUC");
submenu.add(submenuitem1);
submenu.add(submenuitem2);
submenu.add(submenuitem3);
JMenuItem menuitem1_1 = new JMenuItem("New");
JMenuItem menuitem1_2 = new JMenuItem("Open");
JMenuItem menuitem1_3 = new JMenuItem("Save");
JMenuItem menuitem1_4 = new JMenuItem("Close");
menu1.add(menuitem1_1);
menu1.add(menuitem1_2);
menu1.add(submenu);
menu1.add(menuitem1_3);
menu1.add(menuitem1_4);
setJMenuBar(menubar);
JPanel p = new JPanel();
label = new JLabel();
p.add(label);
Container contentPane = getContentPane();
contentPane.add(p, BorderLayout.CENTER);
}
}
ではコンパイルを行った上で実行してみます。
では「File」メニューをクリックして下さい。
メニューアイテムの中にサブメニューも追加されています。サブメニューには文字列の後に右矢印が付いていてメニューアイテムと区別が付くようになっています。
では「Encode」メニューにマウスを合わせて下さい。
サブメニューの中に追加されているメニューアイテムが表示されます。
( Written by Tatsuo Ikura )
JavaDrive