Java-GUI编程之菜单组件

首页 / 新闻资讯 / 正文

前面讲解了如果构建GUI界面,其实就是把一些GUI的组件,按照一定的布局放入到容器中展示就可以了。在实际开发中,除了主界面,还有一类比较重要的内容就是菜单相关组件,可以通过菜单相关组件很方便的使用特定的功能,在AWT中,菜单相关组件的使用和之前学习的组件是一模一样的,只需要把菜单条、菜单、菜单项组合到一起,按照一定的布局,放入到容器中即可。

Java-GUI编程之菜单组件

下表中给出常见的菜单相关组件:

菜单组件名称 功能
MenuBar 菜单条 , 菜单的容器 。
Menu 菜单组件 , 菜单项的容器 。 它也是Menultem的子类 ,所以可作为菜单项使用
PopupMenu 上下文菜单组件(右键菜单组件)
Menultem 菜单项组件 。
CheckboxMenuItem 复选框菜单项组件

下图是常见菜单相关组件集成体系图:

Java-GUI编程之菜单组件

菜单相关组件使用:

1.准备菜单项组件,这些组件可以是MenuItem及其子类对象

2.准备菜单组件Menu或者PopupMenu(右击弹出子菜单),把第一步中准备好的菜单项组件添加进来;

3.准备菜单条组件MenuBar,把第二步中准备好的菜单组件Menu添加进来;

4.把第三步中准备好的菜单条组件添加到窗口对象中显示。

小技巧:

1.如果要在某个菜单的菜单项之间添加分割线,那么只需要调用Menu的add(new MenuItem(-))即可。

2.如果要给某个菜单项关联快捷键功能,那么只需要在创建菜单项对象时设置即可,例如给菜单项关联 ctrl+shif+/ 快捷键,只需要:new MenuItem("菜单项名字",new MenuShortcut(KeyEvent.VK_Q,true);

案例1:

使用awt中常用菜单组件,完成下图效果

Java-GUI编程之菜单组件

演示代码1:

import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;  public class SimpleMenu {     //创建窗口     private Frame frame = new Frame("这里测试菜单相关组件");     //创建菜单条组件     private MenuBar menuBar = new MenuBar();     //创建文件菜单组件     private Menu fileMenu = new Menu("文件");     //创建编辑菜单组件     private Menu editMenu = new Menu("编辑");     //创建新建菜单项     private MenuItem newItem = new MenuItem("新建");     //创建保存菜单项     private MenuItem saveItem = new MenuItem("保存");     //创建退出菜单项     private MenuItem exitItem = new MenuItem("退出");      //创建自动换行选择框菜单项     private CheckboxMenuItem autoWrap = new CheckboxMenuItem("自动换行");      //创建复制菜单项     private MenuItem copyItem = new MenuItem("复制");      //创建粘贴菜单项     private MenuItem pasteItem = new MenuItem("粘贴");      //创建格式菜单     private Menu formatMenu = new Menu("格式");      //创建注释菜单项     private MenuItem commentItem = new MenuItem("注释");     //创建取消注释菜单项     private MenuItem cancelItem = new MenuItem("取消注释");      //创建一个文本域     private TextArea ta = new TextArea(6, 40);      public void init(){         //定义菜单事件监听器         ActionListener listener = new ActionListener() {             @Override             public void actionPerformed(ActionEvent e) {                 String command = e.getActionCommand();                 ta.append("单击“"+command+"”菜单\n");                 if (command.equals("退出")){                     System.exit(0);                 }             }         };         //为注释菜单项和退出菜单项注册监听器         commentItem.addActionListener(listener);         exitItem.addActionListener(listener);          //为文件菜单fileMenu添加菜单项         fileMenu.add(newItem);         fileMenu.add(saveItem);         fileMenu.add(exitItem);          //为编辑菜单editMenu添加菜单项         editMenu.add(autoWrap);         editMenu.add(copyItem);         editMenu.add(pasteItem);          //为格式化菜单formatMenu添加菜单项         formatMenu.add(commentItem);         formatMenu.add(cancelItem);          //将格式化菜单添加到编辑菜单中,作为二级菜单         editMenu.add(new MenuItem("-"));         editMenu.add(formatMenu);           //将文件菜单和编辑菜单添加到菜单条中         menuBar.add(fileMenu);         menuBar.add(editMenu);           //把菜单条设置到frame窗口上         frame.setMenuBar(menuBar);          //把文本域添加到frame中         frame.add(ta);          //设置frame最佳大小并可见         frame.pack();         frame.setVisible(true);     }     public static void main(String[] args) {         new SimpleMenu().init();     } }

案例2:

通过PopupMenu实现下图效果:

Java-GUI编程之菜单组件

实现思路:

1.创建PopubMenu菜单组件;

2.创建多个MenuItem菜单项,并添加到PopupMenu中;

3.将PopupMenu添加到目标组件中;

4.为需要右击出现PopubMenu菜单的组件,注册鼠标监听事件,当监听到用户释放右键时,弹出菜单。

演示代码2:

import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent;  public class PopupMenuTest {     private Frame frame = new Frame("这里测试PopupMenu");     // 创建PopubMenu菜单     private PopupMenu popupMenu = new PopupMenu();     // 创建菜单条     private MenuItem commentItem = new MenuItem("注释");     private MenuItem cancelItem = new MenuItem("取消注释");     private MenuItem copyItem = new MenuItem("复制");     private MenuItem pasteItem = new MenuItem("保存");     // 创建一个文本域     private TextArea ta = new TextArea("我爱中华!!!", 6, 40);     // 创建一个Panel     private Panel panel = new Panel();      public void init() {         // 把菜单项添加到PopupMenu中         popupMenu.add(commentItem);         popupMenu.add(cancelItem);         popupMenu.add(copyItem);         popupMenu.add(pasteItem);         // 设置panel大小         panel.setPreferredSize(new Dimension(300, 100));         // 把PopupMenu添加到panel中         panel.add(popupMenu);         // 为panel注册鼠标事件         panel.addMouseListener(new MouseAdapter() {             @Override             public void mouseReleased(MouseEvent e) {                 boolean flag = e.isPopupTrigger();                 // 判断当前鼠标操作是不是触发PopupMenu的操作                 if (flag) {                     // 让PopupMenu显示在panel上,并且跟随鼠标事件发生的地方显示                     popupMenu.show(panel, e.getX(), e.getY());                 }             }         });         // 把ta添加到frame中间区域中          frame.add(ta);          // 把panel添加到frame底部         frame.add(panel, BorderLayout.SOUTH);          // 设置frame最佳大小,并可视;         frame.pack();         frame.setVisible(true);     }      public static void main(String[] args) {         new PopupMenuTest().init();     }  }