Swing 菜单JMenu

  Swing菜单和菜单项是按钮,因为JMenuItem扩展AbstractButton,JMenu扩展JMenuItem。因此,Swing菜单和菜单项继承了如下功能,即包含文本和(或)图标、显示光标进入时的图标和助记符等。 
  JMenuItem和JMenu的父组件,它们最后都归于java.awt.Container,以强调菜单和菜单项都是容器。可以把任何类型的组件(从包含一个动画GIF的标签到JTree的一个实例)添加到一个菜单或菜单项中。 
  菜单和菜单项还实现MenuElement接口,以便参与菜单事件的处理。 
  工具条和弹出式菜单都扩展JComponent类,即任意组件都可以添加到一个工具条或弹出式菜单中。 
  本章将介绍下面的组件: 
  •JMenuItem 
  •JCheckBoxMenuItem 
  •JRadioButtonMenuItem 
  •JMenu 
  •JPopupMenu 
  •JMenuBar 

例子 1:在菜单中增加复选菜单 

[java]  view plain copy
  1. import java.awt.event.KeyEvent;  
  2. import javax.swing.JCheckBoxMenuItem;  
  3. import javax.swing.JFrame;  
  4. import javax.swing.JMenu;  
  5. import javax.swing.JMenuBar;  
  6. import javax.swing.JMenuItem;  
  7. public class JCheckBoxMenuItemDemo {  
  8.   public static void main(final String args[]) {  
  9.     JFrame frame = new JFrame("MenuSample Example");  
  10.     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  11.     JMenuBar menuBar = new JMenuBar();  
  12.     // File Menu, F - Mnemonic  
  13.     JMenu fileMenu = new JMenu("File");  
  14.     fileMenu.setMnemonic(KeyEvent.VK_F);  
  15.     menuBar.add(fileMenu);  
  16.     // File->New, N - Mnemonic  
  17.     JMenuItem newMenuItem = new JMenuItem("New", KeyEvent.VK_N);  
  18.     fileMenu.add(newMenuItem);  
  19.     JCheckBoxMenuItem caseMenuItem = new JCheckBoxMenuItem("Case Sensitive");  
  20.     caseMenuItem.setMnemonic(KeyEvent.VK_C);  
  21.     fileMenu.add(caseMenuItem);  
  22.       
  23.     frame.setJMenuBar(menuBar);  
  24.     frame.setSize(350250);  
  25.     frame.setVisible(true);  
  26.   }  
  27. }  
 

例2:菜单事件处理 

[java]  view plain copy
  1. import java.awt.Container;  
  2. import java.awt.event.ActionEvent;  
  3. import java.awt.event.ActionListener;  
  4. import java.awt.event.ItemEvent;  
  5. import java.awt.event.ItemListener;  
  6. import java.awt.event.WindowAdapter;  
  7. import java.awt.event.WindowEvent;  
  8. import javax.swing.AbstractButton;  
  9. import javax.swing.ButtonGroup;  
  10. import javax.swing.JCheckBoxMenuItem;  
  11. import javax.swing.JFrame;  
  12. import javax.swing.JMenu;  
  13. import javax.swing.JMenuBar;  
  14. import javax.swing.JMenuItem;  
  15. import javax.swing.JRadioButtonMenuItem;  
  16. import javax.swing.JSeparator;  
  17. import javax.swing.JTextField;  
  18. public class SwingWinMenus extends JFrame {  
  19.   public static int WIDTH = 300;  
  20.   public static int HEIGHT = 300;  
  21.   public static String TITLE = "SwingWin";  
  22.   Container frameContainer;  
  23.   JTextField textField = new JTextField(50);  
  24.   JMenuBar menuBar = new JMenuBar();  
  25.   JMenu fileMenu = new JMenu("File");  
  26.   JMenuItem fileNew = new JMenuItem("New");  
  27.   JMenuItem fileOpen = new JMenuItem("Open");  
  28.   JMenuItem fileSave = new JMenuItem("Save");  
  29.   JMenuItem fileExit = new JMenuItem("Exit");  
  30.   JMenu editMenu = new JMenu("Edit");  
  31.   JMenuItem editCut = new JMenuItem("Cut");  
  32.   JMenuItem editCopy = new JMenuItem("Copy");  
  33.   JMenuItem editPaste = new JMenuItem("Paste");  
  34.   JMenu specialMenu = new JMenu("Special");  
  35.   JCheckBoxMenuItem specialCheck1 = new JCheckBoxMenuItem("Check 1");  
  36.   JCheckBoxMenuItem specialCheck2 = new JCheckBoxMenuItem("Check 2"true);  
  37.   JSeparator separator = new JSeparator();  
  38.   JRadioButtonMenuItem specialRadio1 = new JRadioButtonMenuItem("Radio 1");  
  39.   JRadioButtonMenuItem specialRadio2 = new JRadioButtonMenuItem("Radio 2");  
  40.   ButtonGroup buttonGroup = new ButtonGroup();  
  41.   public SwingWinMenus() {  
  42.     super("");  
  43.     fileMenu.add(fileNew);  
  44.     fileMenu.add(fileOpen);  
  45.     fileMenu.add(fileSave);  
  46.     fileMenu.add(fileExit);  
  47.     editMenu.add(editCut);  
  48.     editMenu.add(editCopy);  
  49.     editMenu.add(editPaste);  
  50.     specialMenu.add(specialCheck1);  
  51.     specialMenu.add(specialCheck2);  
  52.     specialMenu.add(separator);  
  53.     buttonGroup.add(specialRadio1);  
  54.     buttonGroup.add(specialRadio2);  
  55.     specialMenu.add(specialRadio1);  
  56.     specialMenu.add(specialRadio2);  
  57.     menuBar.add(fileMenu);  
  58.     menuBar.add(editMenu);  
  59.     menuBar.add(specialMenu);  
  60.     setJMenuBar(menuBar);  
  61.     frameContainer = getContentPane();  
  62.     frameContainer.setLayout(null);  
  63.     textField.setBounds(10010010020);  
  64.     frameContainer.add(textField);  
  65.     setupEventHandlers();  
  66.     setSize(450450);  
  67.     setVisible(true);  
  68.   }  
  69.   void setupEventHandlers() {  
  70.     addWindowListener(new WindowHandler());  
  71.     fileNew.addActionListener(new MenuItemHandler());  
  72.     fileOpen.addActionListener(new MenuItemHandler());  
  73.     fileSave.addActionListener(new MenuItemHandler());  
  74.     fileExit.addActionListener(new MenuItemHandler());  
  75.     editCut.addActionListener(new MenuItemHandler());  
  76.     editCopy.addActionListener(new MenuItemHandler());  
  77.     editPaste.addActionListener(new MenuItemHandler());  
  78.     specialCheck1.addItemListener(new ItemHandler());  
  79.     specialCheck2.addItemListener(new ItemHandler());  
  80.     specialRadio1.addItemListener(new ItemHandler());  
  81.     specialRadio2.addItemListener(new ItemHandler());  
  82.   }  
  83.   public static void main(String[] args) {  
  84.     SwingWinMenus app = new SwingWinMenus();  
  85.   }  
  86.   public class WindowHandler extends WindowAdapter {  
  87.     public void windowClosing(WindowEvent e) {  
  88.       System.exit(0);  
  89.     }  
  90.   }  
  91.   public class MenuItemHandler implements ActionListener {  
  92.     public void actionPerformed(ActionEvent e) {  
  93.       String cmd = e.getActionCommand();  
  94.       if (cmd.equals("Exit"))  
  95.         System.exit(0);  
  96.       else  
  97.         textField.setText(cmd);  
  98.     }  
  99.   }  
  100.   public class ItemHandler implements ItemListener {  
  101.     public void itemStateChanged(ItemEvent e) {  
  102.       AbstractButton button = (AbstractButton) e.getItem();  
  103.       String label = button.getText();  
  104.       if (button.isSelected())  
  105.         label += " true";  
  106.       else  
  107.         label += " false";  
  108.       textField.setText(label);  
  109.     }  
  110.   }  
  111. }  
 

例3:弹出试菜单 

[java]  view plain copy
  1. import java.awt.Dimension;  
  2. import javax.swing.JButton;  
  3. import javax.swing.JFrame;  
  4. import javax.swing.JMenuItem;  
  5. import javax.swing.JPopupMenu;  
  6. import javax.swing.event.PopupMenuEvent;  
  7. import javax.swing.event.PopupMenuListener;  
  8. // Define PopupMenuListener  
  9. class MyPopupMenuListener implements PopupMenuListener {  
  10.   public void popupMenuCanceled(PopupMenuEvent popupMenuEvent) {  
  11.     System.out.println("Canceled");  
  12.   }  
  13.   public void popupMenuWillBecomeInvisible(PopupMenuEvent popupMenuEvent) {  
  14.     System.out.println("Becoming Invisible");  
  15.   }  
  16.   public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent) {  
  17.     System.out.println("Becoming Visible");  
  18.   }  
  19. }  
  20. public class PopupMenuListenerDemo {  
  21.   public static void main(final String args[]) {  
  22.     JFrame frame = new JFrame("PopupSample Example");  
  23.     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  24.     // Create popup menu, attach popup menu listener  
  25.     JPopupMenu popupMenu = new JPopupMenu("Title");  
  26.     popupMenu.setSize(new Dimension(100,50));  
  27.     PopupMenuListener popupMenuListener = new MyPopupMenuListener();  
  28.     popupMenu.addPopupMenuListener(popupMenuListener);  
  29.     // Cut  
  30.     JMenuItem cutMenuItem = new JMenuItem("Cut");  
  31.     popupMenu.add(cutMenuItem);  
  32.     // Copy  
  33.     JMenuItem copyMenuItem = new JMenuItem("Copy");  
  34.     popupMenu.add(copyMenuItem);  
  35.     // Paste  
  36.     JMenuItem pasteMenuItem = new JMenuItem("Paste");  
  37.     pasteMenuItem.setEnabled(false);  
  38.     popupMenu.add(pasteMenuItem);  
  39.     // Separator  
  40.     popupMenu.addSeparator();  
  41.     // Find  
  42.     JMenuItem findMenuItem = new JMenuItem("Find");  
  43.     popupMenu.add(findMenuItem);  
  44.     JButton label = new JButton();  
  45.     frame.add(label);  
  46.     label.setComponentPopupMenu(popupMenu);  
  47.     frame.setSize(350250);  
  48.     frame.setVisible(true);  
  49.   }  
  50. }  
 

例 4:给菜单增加快捷方式 

[java]  view plain copy
  1. import java.awt.event.KeyEvent;  
  2. import javax.swing.JFrame;  
  3. import javax.swing.JMenu;  
  4. import javax.swing.JMenuBar;  
  5. import javax.swing.JMenuItem;  
  6. import javax.swing.KeyStroke;  
  7. public class JMenuItemKeyStroke {  
  8.   public static void main(final String args[]) {  
  9.     JFrame frame = new JFrame("MenuSample Example");  
  10.     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  11.     JMenuBar menuBar = new JMenuBar();  
  12.     // File Menu, F - Mnemonic  
  13.     JMenu fileMenu = new JMenu("File");  
  14.     fileMenu.setMnemonic(KeyEvent.VK_F);  
  15.     menuBar.add(fileMenu);  
  16.     // File->New, N - Mnemonic  
  17.     JMenuItem newMenuItem = new JMenuItem("New", KeyEvent.VK_N);  
  18.     fileMenu.add(newMenuItem);  
  19.     // Edit->Cut, T - Mnemonic, CTRL-X - Accelerator  
  20.     JMenuItem cutMenuItem = new JMenuItem("Cut", KeyEvent.VK_T);  
  21.     KeyStroke ctrlXKeyStroke = KeyStroke.getKeyStroke("control X");  
  22.     cutMenuItem.setAccelerator(ctrlXKeyStroke);  
  23.     fileMenu.add(cutMenuItem);  
  24.     frame.setJMenuBar(menuBar);  
  25.     frame.setSize(350250);  
  26.     frame.setVisible(true);  
  27.   }  
  28. }  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值