• 菜单组件Menu


    笔记:https://www.yuque.com/huangzhanqi/rhwoir/repuodh23fz01wiv

    仓库Java图形化界面: Java图形化界面学习demo与资料 (gitee.com)

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

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

    菜单组件名称

    功能

    MenuBar

    菜单条 , 菜单的容器 。

    Menu

    菜单组件 , 菜单项的容器 。 它也是Menultem的子类 ,所以可作为菜单项使用

    PopupMenu

    上下文菜单组件(右键菜单组件)

    Menultem

    菜单项组件 。

    CheckboxMenuItem

    复选框菜单项组件

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

    菜单相关组件使用:

    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中常用菜单组件,完成下图效果

    演示代码1:

    1. import java.awt.*;
    2. import java.awt.event.ActionEvent;
    3. import java.awt.event.ActionListener;
    4. public class SimpleMenu {
    5. //创建窗口
    6. private Frame frame = new Frame("这里测试菜单相关组件");
    7. //创建菜单条组件
    8. private MenuBar menuBar = new MenuBar();
    9. //创建文件菜单组件
    10. private Menu fileMenu = new Menu("文件");
    11. //创建编辑菜单组件
    12. private Menu editMenu = new Menu("编辑");
    13. //创建新建菜单项
    14. private MenuItem newItem = new MenuItem("新建");
    15. //创建保存菜单项
    16. private MenuItem saveItem = new MenuItem("保存");
    17. //创建退出菜单项
    18. private MenuItem exitItem = new MenuItem("退出");
    19. //创建自动换行选择框菜单项
    20. private CheckboxMenuItem autoWrap = new CheckboxMenuItem("自动换行");
    21. //创建复制菜单项
    22. private MenuItem copyItem = new MenuItem("复制");
    23. //创建粘贴菜单项
    24. private MenuItem pasteItem = new MenuItem("粘贴");
    25. //创建格式菜单
    26. private Menu formatMenu = new Menu("格式");
    27. //创建注释菜单项
    28. private MenuItem commentItem = new MenuItem("注释");
    29. //创建取消注释菜单项
    30. private MenuItem cancelItem = new MenuItem("取消注释");
    31. //创建一个文本域
    32. private TextArea ta = new TextArea(6, 40);
    33. public void init(){
    34. //定义菜单事件监听器
    35. ActionListener listener = new ActionListener() {
    36. @Override
    37. public void actionPerformed(ActionEvent e) {
    38. String command = e.getActionCommand();
    39. ta.append("单击“"+command+"”菜单\n");
    40. if (command.equals("退出")){
    41. System.exit(0);
    42. }
    43. }
    44. };
    45. //为注释菜单项和退出菜单项注册监听器
    46. commentItem.addActionListener(listener);
    47. exitItem.addActionListener(listener);
    48. //为文件菜单fileMenu添加菜单项
    49. fileMenu.add(newItem);
    50. fileMenu.add(saveItem);
    51. fileMenu.add(exitItem);
    52. //为编辑菜单editMenu添加菜单项
    53. editMenu.add(autoWrap);
    54. editMenu.add(copyItem);
    55. editMenu.add(pasteItem);
    56. //为格式化菜单formatMenu添加菜单项
    57. formatMenu.add(commentItem);
    58. formatMenu.add(cancelItem);
    59. //将格式化菜单添加到编辑菜单中,作为二级菜单
    60. editMenu.add(new MenuItem("-"));
    61. editMenu.add(formatMenu);
    62. //将文件菜单和编辑菜单添加到菜单条中
    63. menuBar.add(fileMenu);
    64. menuBar.add(editMenu);
    65. //把菜单条设置到frame窗口上
    66. frame.setMenuBar(menuBar);
    67. //把文本域添加到frame中
    68. frame.add(ta);
    69. //设置frame最佳大小并可见
    70. frame.pack();
    71. frame.setVisible(true);
    72. }
    73. public static void main(String[] args) {
    74. new SimpleMenu().init();
    75. }
    76. }

    案例2:

    通过PopupMenu实现下图效果:

    实现思路:

    1.创建PopubMenu菜单组件;

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

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

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

    演示代码2:

    1. import java.awt.*;
    2. import java.awt.event.MouseAdapter;
    3. import java.awt.event.MouseEvent;
    4. public class PopupMenuTest {
    5. private Frame frame = new Frame("这里测试PopupMenu");
    6. //创建PopubMenu菜单
    7. private PopupMenu popupMenu = new PopupMenu();
    8. //创建菜单条
    9. private MenuItem commentItem = new MenuItem("注释");
    10. private MenuItem cancelItem = new MenuItem("取消注释");
    11. private MenuItem copyItem = new MenuItem("复制");
    12. private MenuItem pasteItem = new MenuItem("保存");
    13. //创建一个文本域
    14. private TextArea ta = new TextArea("我爱中华!!!", 6, 40);
    15. //创建一个Panel
    16. private Panel panel = new Panel();
    17. public void init(){
    18. //把菜单项添加到PopupMenu中
    19. popupMenu.add(commentItem);
    20. popupMenu.add(cancelItem);
    21. popupMenu.add(copyItem);
    22. popupMenu.add(pasteItem);
    23. //设置panel大小
    24. panel.setPreferredSize(new Dimension(300,100));
    25. //把PopupMenu添加到panel中
    26. panel.add(popupMenu);
    27. //为panel注册鼠标事件
    28. panel.addMouseListener(new MouseAdapter() {
    29. @Override
    30. public void mouseReleased(MouseEvent e) {
    31. boolean flag = e.isPopupTrigger();
    32. //判断当前鼠标操作是不是触发PopupMenu的操作
    33. if (flag){
    34. //让PopupMenu显示在panel上,并且跟随鼠标事件发生的地方显示
    35. popupMenu.show(panel,e.getX(),e.getY());
    36. }
    37. }
    38. });
    39. //把ta添加到frame中间区域中
    40. frame.add(ta);
    41. //把panel添加到frame底部
    42. frame.add(panel,BorderLayout.SOUTH);
    43. //设置frame最佳大小,并可视;
    44. frame.pack();
    45. frame.setVisible(true);
    46. }
    47. public static void main(String[] args) {
    48. new PopupMenuTest().init();
    49. }
    50. }

  • 相关阅读:
    【浅学Java数据结构】二叉搜索树
    Java读写文件时的GBK和UTF8转换问题
    SuperMap iServer 机器学习服务配置及使用
    python实现进制转换
    贪心算法-磁盘文件最优存储问题
    通过bat脚本控制Oracle服务启动停止
    Linux基础学习笔记(十)——正则表达式
    webgl(three.js)3D光伏,3D太阳能能源,3D智慧光伏、光伏发电、清洁能源三维可视化解决方案——第十六课
    07 【Sass语法介绍-控制指令】
    排序学习(Learning to rank)综述
  • 原文地址:https://blog.csdn.net/m0_73843666/article/details/132824388