階層化メニューの作成
メニューにはメニューアイテムを追加することができますが、メニューを表す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 )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。