java 图形化小工具Abstract Window Toolit 菜单项

AWT 中的菜单由如下几个类组合而成
  • MenuBar: 菜单条,菜单的容器。
  • Menu: 菜单组件,菜单项的容器,它也是Menultem的子类,所以可作为菜单项使用。
  • PopupMenu: 上下文菜单组件(右键菜单组件)。
  • MenuItem: 菜单项组件。
  • CheckboxMenuItem: 复选框菜单组件。
  • MenuShortcut: 菜单快捷键组件。
AWT菜单的继承组合关系如下:
菜单代码示例:
  • MenuBar 菜单栏
  • Menu 菜单名
  • MenuItem 菜单子项
  • popupMenu 右键菜单
  • e.consume();//结束事件传播。
import java.awt.*;
import java.awt.event.*;

/**
 * @ClassName MenuTest
 * @projectName: object1
 * @author: Zhangmingda
 * @description: XXX
 * date: 2021/5/6.
 */
public class MenuTest {
    public static void main(String[] args) {
        Frame frame = new Frame("记事本");
        //关闭按钮动作
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("窗口关闭");
                System.exit(0);
            }
        });
        //文本框
        TextArea textArea = new TextArea(15,60);
        frame.add(textArea);


        //菜单栏
        MenuBar menuBar = new MenuBar();
        //菜单
        Menu fileMenu = new Menu("文件");
        Menu editMenu = new Menu("编辑");

        //监听点击事件
        ActionListener menuItemListener = e -> {
            String cmd = e.getActionCommand();
            System.out.println("点击了菜单:" + cmd);
            if (cmd.equals("退出")){
                System.exit(0);
            }
        };
        //文件菜单项
        MenuItem newFileItem = new MenuItem("新建");
        MenuItem saveFileItem = new MenuItem("保存");
        MenuItem exitItem = new MenuItem("退出",new MenuShortcut(KeyEvent.VK_X)); //设置快捷键:new MenuShortcut(KeyEvent.VK_X)
        //添加监听点击事件
        newFileItem.addActionListener(menuItemListener);
        saveFileItem.addActionListener(menuItemListener);
        exitItem.addActionListener(menuItemListener);
        //文件菜单项组件组装
        fileMenu.add(newFileItem);
        fileMenu.add(saveFileItem);
        fileMenu.add(exitItem);
        //编辑菜单项
        MenuItem autoLen = new MenuItem("自动换行");
        MenuItem copyItem = new MenuItem("复制");
        MenuItem pasteItem = new MenuItem("粘贴");
        Menu formatMenu = new Menu("格式");
        MenuItem addNote = new MenuItem("注释");
        MenuItem cancleNote = new MenuItem("取消注释");
        formatMenu.add(addNote);formatMenu.add(cancleNote);
        //编辑菜单项组装
        editMenu.add(autoLen);
        editMenu.add(new MenuItem("-")); //分割线
        editMenu.add(copyItem);
        editMenu.add(pasteItem);
        editMenu.add(new MenuItem("-"));
        editMenu.add(formatMenu);
        //菜单栏,添加菜单
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        frame.setMenuBar(menuBar);

        //右键菜单
        PopupMenu popupMenu = new PopupMenu();
        popupMenu.add(new MenuItem("复制"));
        popupMenu.add(new MenuItem("粘贴"));
        frame.add(popupMenu); //当前窗口添加右键菜单窗口

        //文本框内鼠标松开,右键触发的动作
        textArea.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                if (e.isPopupTrigger()){ //如果是右键点击后的松开动作
                    popupMenu.show(textArea,e.getX(),e.getY());
                    e.consume();//结束事件。阻止事件被其他监听器捕获:比如windows自带的右击弹窗动作
                }
            }
        });
        frame.setLocation(400,300);
        frame.pack();
        frame.setVisible(true);

    }
}

原文地址:https://www.cnblogs.com/zhangmingda/p/14737152.html