کنترل JMenuBar

از کنترل JMenuBar برای ساخت نوار منو استفاده می شود. در شکل زیر نمایی کلی از یک نوار منو را مشاهده می کنید :
JMenu-in-java-01
در جاوا برای ایجاد یک نوار منو کامل از کلاس هایی که در شکل زیر مشاهده می کنید استفاده می شود :

JMenu-in-java-02

JMenu-in-java-03

حال اجازه دهید که وارد قسمت کدنویسی شده و نوار منوی بالا را شبیه سازی کنیم. به کد زیر توجه کنید :

   1: import java.awt.*;
   2: import javax.swing.*;
   3: import java.awt.event.*;
   4: 
   5: public class FrameDemo 
   6: {
   7:     public static void main(String[] args)
   8:     {
   9:         JFrame frame1 = new JFrame("JMenu Demo");
  10:         frame1.setLayout(new BorderLayout());
  11:         
  12:         JMenuBar menubar1 = new JMenuBar();
  13:         frame1.add(menubar1,BorderLayout.NORTH);
  14:         
  15:         JMenu menu1 = new JMenu("File");       
  16:         JMenu menu2 = new JMenu("Edit");
  17:         JMenu menu3 = new JMenu("Format");
  18:         JMenu menu4 = new JMenu("Help");
  19:                 
  20:         menubar1.add(menu1);
  21:         menubar1.add(menu2);
  22:         menubar1.add(menu3);
  23:         menubar1.add(menu4);
  24:                 
  25:         frame1.setSize(430 , 315);
  26:         frame1.setVisible(true);          
  27:     }   
  28: }

در کد بالا و در خطوط 9 یک فریم ایجاد کرده و در خط 10 از کلاس BorderLayout برای لایه بندی آن استفاده می کنیم. در خط 12 یک نوار منو با استفاده از کلاس JMenuBar ایجاد کرده و آن را در خط 13 به بالای فریم می چسبانیم. اگر خطوط 23-15 را پاک کرده و برنامه را اجرا کنید مشاهده می کنید که هنوز کار خاصی انجام نشده است. برای اضافه کردن منو به منوبار از کلاس JMenu استفاده می شود. در خطوط 18-15 چهار منو ایجاد کرده و در خطوط 23-20 آنها را به منوبار اضافه می کنیم. حال برنامه را اجرا و نتیجه را مشاهده کنید :

JMenu-in-java-04
اکنون نوبت به زیر منو ها می رسد. برای ایجاد زیر منو از کلاس JMenuItem استفاده می شود. فرض کنید که می خواهیم دو زیر منو به منوی File اضافه کنیم. برای این کار کدهای زیر از 19 به بعد کد بالا بنویسید (تمامی کدهایی که در ادامه آموزش داده می شود را از همین خط به بعد بنویسید. شما می توانید بعد از تکمیل کدها آنها را منظم کنید) :

JMenuItem menuItem1 = new JMenuItem("Open");
menu1.add(menuItem1);       
        
JMenuItem menuItem2 = new JMenuItem("Exit");
menu1.add(menuItem2);

حال برنامه را اجرا و نتیجه را مشاهده کنید :
JMenu-in-java-05

برای ایجاد خط جدا کننده هم از کلاس JSeparator استفاده می شود. کافیست که یک شی از این کلاس را در بین دو زیر منو قرار دهید :

JMenuItem menuItem1 = new JMenuItem("Open");
menu1.add(menuItem1); 

menu1.add(new JSeparator());      
        
JMenuItem menuItem2 = new JMenuItem("Exit");
menu1.add(menuItem2);

برنامه را دوباره اجرا و نتیجه را مشاهده کنید :
JMenu-in-java-06
همانطو که مشاهده کردید برای ایجاد زیر منو از کلاس JMenuItem استفاده می شود ولی اگر بخواهیم برای یک زیر منو ، زیر منوی دیگری تعریف کنیم باید زیر منوی اصلی را با استفاده از کلاس JMenu ایجاد کنیم. برای درک بهتر کد بالا را با کدهای زیر جایگزین کنید :

JMenu menuItem1 = new JMenu("Open");
menu1.add(menuItem1);
JMenuItem submenuItem1 = new JMenuItem("New Document");
menuItem1.add(submenuItem1);

menu1.add(new JSeparator());      

JMenuItem menuItem2 = new JMenuItem("Exit");
menu1.add(menuItem2);

همانطور که در کد بالا مشاهده می کنید ابتدا منوی Open را با استفاده از کلاس JMenu ایجاد و سپس با استفاده از کلاس JMenuItem زیر منوی New Document را به آن اضافه کرده ایم :
JMenu-in-java-11
سازنده کلاس JMenuItem یک پارامتر دوم هم دریافت می کند که با استفاده از آن می توان یک آیکون به زیر منو اختصاص داد :

JMenuItem submenuItem1 = new JMenuItem("New Document",new ImageIcon("D:\\images\\new.png"));

JMenu-in-java-12
برای ایجاد کلید میانبر و استفاده از کلیدهای ترکیبی هم از متد ()setMnemonic استفاده می شود. فرض کنید که می خواهیم با زدن دکمه های Alt+F زیر منو های منوی فایل نمایش داده شود. برای این کار کد زیر را می نویسید :

menu1.setMnemonic(KeyEvent.VK_F);

اگر برنامه را اجرا کنید مشاهده می کنید که یک خط تیره زیر حرف F کشیده شده است که نشان دهنده این است که شما می توانید از کلید Alt به همراه حرف F برای باز شدن منو استفاده کنید. برنامه را اجرا و دکمه Alt+F را بزنید :

JMenu-in-java-07
برای ایجاد ایجاد کلید میانبر با استفاده از دکمه کنترل (Ctrl) هم می توانید از کلاس KeyStroke استفاده کنید. فرض کنید که می خواهیم با زدن دکمه های Ctrl+O زیر منوی Exit (یا همان menuitem2) عمل کند. برای این کار از کد زیر استفاده می کنیم :

KeyStroke keystroke = KeyStroke.getKeyStroke("control X");
menuItem2.setAccelerator(keystroke);

برنامه را اجرا و نتیجه را مشاهده کنید :
JMenu-in-java-14
برای ایجاد یک زیر منو از نوع CheckBox هم از کلاس JCheckBoxMenuItem استفاده می شود. فرض کنید که می خواهیم یک زیر منو از همین نوع به منوی Format (یا همان menu3) اضافه کنیم. برای اینکار به صورت زیر عمل می کنیم :

JCheckBoxMenuItem checkboxmenuitem1 = new JCheckBoxMenuItem("Word_Wrap");
menu3.add(checkboxmenuitem1); 

برنامه را اجر و بر روی منوی Format کلیک کنید :
JMenu-in-java-09