การสร้างส่วนติดต่อกับผู้ใช้ (5) การสร้างเมนู
การสร้างเมนู มีคลาสที่เกี่ยวข้องกับการสร้างเมนูดังนี้ JMenuBar ใช้สร้างแถบเมนูด้านบน (จะได้พื้นที่ขาวๆ เปล่าๆ) JMenu ใช้สร้างรายการกลุ่มเมนู (ในภาพบนมี 3 ตัว คือ A Menu, Another Menu, A submenu) JMenuItem ใช้สร้างเมนูย่อย ที่เป็นเมนูลูกตัวสุดท้าย (ในภาพบนมี 5 ตัวคือ A text-only menu item, An item in the submenu, Another item และเมนูที่มีรูปภาพด้านหน้าอีก 2 อัน) JCheckboxMenuItem ใช้สร้างเมนูแบบ checkbox (ภาพบนมี 2 ตัว) JRadioButtonMenuItem ใช้สร้างเมนูแบบ radiobutton (ภาพบนมี 2 ตัว) JSeparator ใช้สร้างเส้นคั่นรายการเมนู
JMenuBar ใช้สร้างแถบเมนูด้านบน มี constructor ดังนี้ public JMenuBar() ตัวอย่าง myMenuBar = new JMenuBar(); การใช้งาน สามารถใส่ออบเจ็กต์ของคลาส JMenuBar ลงใน Frame ได้โดยใช้เมธอด setJMenuBar() ตัวอย่าง this.setJMenuBar(myMenuBar);
JMenu ใช้สร้างรายการกลุ่มเมนู constructor ที่สำคัญคือ public JMenu(String label); ตัวอย่าง menuFood = new JMenu("Food"); การใช้งาน ต้องใส่ออบเจ็กต์ของคลาส JMenu ลงใน JMenuBar โดยใช้เมธอด add() ตัวอย่าง myMenuBar.add(menuFood);
JMenuItem ใช้สร้างเมนูย่อยสุดที่เป็นเมนูลูก constructor ที่สำคัญ public JMenuItem(String label); ตัวอย่าง miChickenSteak = new JMenuItem("Chicken steak"); การใช้งาน ให้ใส่ menuItem ลงไปใน menu อีกทีหนึ่งด้วยเมธอด add()
การใส่รูปภาพให้กับ JMenu, JMenuItem สามารถใส่รูปภาพ icon ให้กับเมนูได้โดยใช้คำสั่ง setIcon ตัวอย่าง menuFood.setIcon(new ImageIcon("./icon/food.jpg"));
การกำหนด Mnemonic code คือการกำหนดคีย์ที่เป็น shortcut ให้กับเมนู โดยใช้คำสั่ง setMnemonic() ตัวอย่าง miChickenNoodle.setMnemonic(KeyEvent.VK_C); หมายถึง เมื่อกด key ตัว C ในคีย์บอร์ดจะเป็นการเลือกเมนูนี้
JCheckBoxMenuItem ใช้สร้างรายการเมนูแบบ checkbox Constructor ที่สำคัญ public JCheckBoxMenuItem(String label) public JCheckBoxMenuItem(String label, boolean state)
ขั้นตอนการสร้างเมนู สร้างออบเจ็กต์ของคลาส JMenuBar แล้วใส่ลงไปใน Jframe ใช้คำสั่ง setJMenuBar() สร้างออบเจ็กต์ของคลาส JMenu แล้วใส่ลงไปใน JMenuBar ใช้คำสั่ง add() สร้างออบเจ็กต์ของคลาส JMenuItem แล้วใส่ลงไปใน Jmenu ใช้คำสั่ง add()
ตัวอย่างการสร้างเมนู
public class MenuTest extends JFrame{ //1 public class MenuTest extends JFrame{ //1.ประกาศชื่อออบเจ็กต์ต่างๆ ที่จำเป็นต้องใช้ในโปรแกรม private JMenuBar myMenuBar; private JMenu menuFood, menuDrink, menuNoodle, menuSteak; private JMenuItem miChickenNoodle, miFishNoodle, miChickenSteak, miFishSteak; private JPanel p; private JTextArea ta; private JScrollPane sp; //2.เขียน constructor method เพื่อเริ่มต้นการทำงานขอบออบเจ็กต์ public MenuTest() { buildMenu(); //เรียกเมธอดเพื่อสร้างเมนู buildPanel(); //เรียกเมธอดเพื่อสร้างพาเนล this.setLayout(new BorderLayout()); this.add(p, BorderLayout.CENTER); this.setTitle("IT Restaurant"); setSize(300,300); setLocationRelativeTo(null); //ให้วินโดวส์อยู่กลางหน้าจอ setVisible(true); } //end constructor
miChickenSteak = new JMenuItem("Chicken steak"); //3.เขียนเมธอดเพื่อสร้างเมนู public void buildMenu() { //3.1 สร้าง new ออบเจ็บต์ต่างๆ ที่จำเป็นต้องใช้โปรแกรม myMenuBar = new JMenuBar(); menuFood = new JMenu("Food"); menuDrink = new JMenu("Drink"); menuNoodle = new JMenu("Noodle"); menuSteak = new JMenu("Steak"); miChickenNoodle = new JMenuItem("Chicken noodle”); miFishNoodle = new JMenuItem("Fish noodle“); miChickenSteak = new JMenuItem("Chicken steak"); miFishSteak = new JMenuItem("Fish steak"); //3.2 ใส่รูปภาพให้เมนู menuFood.setIcon(new ImageIcon("./icon/food.jpg")); menuDrink.setIcon(new ImageIcon("./icon/drink.jpg")); miChickenNoodle.setIcon(new ImageIcon("./icon/noodlechicken.jpg")); miFishNoodle.setIcon(new ImageIcon("./icon/noodlefish.jpg")); miChickenNoodle.setMnemonic(KeyEvent.VK_C); //กำหนด mnemonic code miFishNoodle.setMnemonic(KeyEvent.VK_F); //กำหนด mnemonic code
miChickenNoodle.addActionListener(new ActionListener() { // 3.3 เขียนดักจับ event ให้กับ menuItem miChickenNoodle.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { // method getText เพื่อดึงข้อความเดิมที่อยู่ใน textarea ออกมา // method setText เพื่อกำหนดค่าข้อความใหม่ลงไปใน textarea ta.setText(ta.getText() + "You order chicken noodle.\n"); } }); miFishNoodle.addActionListener(new ActionListener() { ta.setText(ta.getText() + "You order fish noodle.\n");
//3. 4 add เมนูต่างๆ ลงไป myMenuBar. add(menuFood); myMenuBar //3.4 add เมนูต่างๆ ลงไป myMenuBar.add(menuFood); myMenuBar.add(menuDrink); menuFood.add(menuNoodle); menuFood.addSeparator(); menuFood.add(menuSteak); menuNoodle.add(miChickenNoodle); menuNoodle.add(miFishNoodle); menuSteak.add(miChickenSteak); menuSteak.add(miFishSteak); //**สำคัญ** เพิ่ม menuBar ลงไปใน Frame this.setJMenuBar(myMenuBar); } //end buildMenu()
//4.สร้างเมธอด buildPanel public void buildPanel() { p = new JPanel(new BorderLayout()); ta = new JTextArea(); sp = new JScrollPane(ta); //รวมให้ textarea มี scrollbar ด้วย //แล้ว add scrollpane ลงไปใน panel p.add(sp, BorderLayout.CENTER); } //5.เขียน main เพื่อเริ่มต้นทำงานโปรแกรม public static void main(String[] args) { MenuTest mt = new MenuTest();
แบบฝึกหัด เขียนโปรแกรม Notepad โดยมีเมนูดังนี้ หมายเหตุ เปลี่ยนสีตัวอักษรใช้คำสั่ง ta.setForeground(Color.red); เปลี่ยน font ใช้คำสั่ง Font newfont = new Font(“Serif”,Font.Plain, 20); ta.setFont(newfont);