zoukankan      html  css  js  c++  java
  • 弹出菜单的创建与使用

    -------------siwuxie095

       

       

       

       

       

       

       

    工程名:TestSwingPopupMenu

    包名:com.siwuxie095.popupmenu

    类名:MyFrame.java

       

       

    工程结构目录如下:

       

       

       

       

       

    MyFrame.java:

       

    package com.siwuxie095.popupmenu;

       

    import java.awt.BorderLayout;

    import java.awt.Component;

    import java.awt.EventQueue;

    import java.awt.event.MouseAdapter;

    import java.awt.event.MouseEvent;

       

    import javax.swing.JFrame;

    import javax.swing.JMenu;

    import javax.swing.JMenuItem;

    import javax.swing.JPanel;

    import javax.swing.JPopupMenu;

    import javax.swing.JSeparator;

    import javax.swing.UIManager;

    import javax.swing.UnsupportedLookAndFeelException;

    import javax.swing.border.EmptyBorder;

       

    import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;

    import java.awt.event.ActionListener;

    import java.awt.event.ActionEvent;

    import javax.swing.JCheckBoxMenuItem;

    import javax.swing.JRadioButtonMenuItem;

       

    public class MyFrame extends JFrame {

       

    private JPanel contentPane;

    JPopupMenu popupMenu;

       

    /**

    * Launch the application.

    */

    public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {

    public void run() {

    try {

    MyFrame frame = new MyFrame();

    frame.setVisible(true);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    });

    }

       

    /**

    * Create the frame.

    */

    public MyFrame() {

     

    //设定成 Windows 样式的 LookAndFeel

    try {

    UIManager.setLookAndFeel(new WindowsLookAndFeel());

    } catch (UnsupportedLookAndFeelException e) {

    e.printStackTrace();

    }

     

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setBounds(100, 100, 450, 300);

    contentPane = new JPanel();

    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

    setContentPane(contentPane);

    contentPane.setLayout(new BorderLayout(0, 0));

     

    //手动为 contentPane 添加鼠标点击事件:鼠标左键点击弹框

    contentPane.addMouseListener(new MouseAdapter() {

     

    @Override

    public void mouseClicked(MouseEvent e) {

    //指明调用者,显示弹框的 X Y 坐标即点击的位置

    popupMenu.show(MyFrame.this, e.getX(), e.getY());

    }

     

    });

     

    // popupMenu 的声明转移到类中

    popupMenu = new JPopupMenu();

     

    //可以将 JPopupMenu 添加到 contentPane 中,也可以不添加

    //将下面的 addPopup() 注释掉即不添加

    addPopup(contentPane, popupMenu);

     

    JMenuItem mntmX = new JMenuItem("X");

    popupMenu.add(mntmX);

     

    JMenuItem mntmY = new JMenuItem("Y");

    popupMenu.add(mntmY);

     

    JMenuItem mntmZ = new JMenuItem("Z");

    popupMenu.add(mntmZ);

     

    //分隔线,可以使用代码手动实现,

    //也可以使用控件(组件) JSeparator 拖动实现

    JSeparator separator = new JSeparator();

    popupMenu.add(separator);

     

    JMenu mnNum = new JMenu("Num");

    popupMenu.add(mnNum);

     

    JMenuItem menuItem = new JMenuItem("1");

    mnNum.add(menuItem);

     

    JMenuItem menuItem_1 = new JMenuItem("2");

    mnNum.add(menuItem_1);

     

    JMenuItem menuItem_2 = new JMenuItem("3");

    mnNum.add(menuItem_2);

     

    JSeparator separator_1 = new JSeparator();

    popupMenu.add(separator_1);

     

    JMenuItem mntmClose = new JMenuItem("Close");

    //对菜单项:Close 添加 actionPerformed 事件

    //点击 Close 关闭程序(注意:添加鼠标点击事件无效)

    mntmClose.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

    System.exit(0);

    }

    });

     

    JCheckBoxMenuItem chckbxmntmC1 = new JCheckBoxMenuItem("C1");

    chckbxmntmC1.setSelected(true);

    popupMenu.add(chckbxmntmC1);

     

    JCheckBoxMenuItem chckbxmntmC2 = new JCheckBoxMenuItem("C2");

    popupMenu.add(chckbxmntmC2);

     

    JRadioButtonMenuItem rdbtnmntmR1 = new JRadioButtonMenuItem("R1");

    rdbtnmntmR1.setSelected(true);

    popupMenu.add(rdbtnmntmR1);

     

    JRadioButtonMenuItem rdbtnmntmR2 = new JRadioButtonMenuItem("R2");

    popupMenu.add(rdbtnmntmR2);

    popupMenu.add(mntmClose);

    }

       

    //这是将 JPopupMenu 添加到 contentPane 中,自动生成的代码

    private static void addPopup(Component component, final JPopupMenu popup) {

    component.addMouseListener(new MouseAdapter() {

    //鼠标右键点击弹框

    public void mousePressed(MouseEvent e) {

    if (e.isPopupTrigger()) {

    showMenu(e);

    }

    }

    //鼠标右键点击弹框

    public void mouseReleased(MouseEvent e) {

    if (e.isPopupTrigger()) {

    showMenu(e);

    }

    }

    private void showMenu(MouseEvent e) {

    popup.show(e.getComponent(), e.getX(), e.getY());

    }

    });

    }

    }

       

       

       

    将窗体 JFrame 的 LookAndFeel 设定为 Windows

       

       

    向窗体 JFrame 添加一个 JPopupMenu

       

       

       

       

    添加完成,注意:JPopupMenu 添加在 contentPane 内

       

       

       

       

    也可以到 Source 中将 JPopupMenu 设定为不放在 contentPane 中

       

       

       

       

    需要为 JPopupMenu 添加元素

       

    (1)添加 JMenu 和 JMenuItem

       

    JMenu 是一个菜单,而 JMenuItem 是一个菜单元素(菜单项)

       

    每一个 JMenu 可以包含 JMenu 和 JMenuItem,即 可以有子菜单

       

       

       

    (2)添加 JCheckBoxMenuItem 和 JRadioButtonMenuItem

       

    JCheckBoxMenuItem 是复选框组成的菜单项,其 selected 属性可以设置默认勾选项

       

    「当对元素(菜单项)的状态进行设定时需要用到复选框」

       

       

    JRadioButtonMenuItem 是单选按钮组成的菜单项,其 selected 属性可以设置默认勾选项

       

    需要将 JRadioButtonMenuItem 添加到 ButtonGroup,才能实现单选

       

    「ButtonGroup 本身不是控件(组件),不能放到容器中,且不可视」

       

       

       

    3)添加 分隔线:可以通过控件(组件) JSeparator 实现菜单栏的分隔

       

       

       

    4)当 弹出菜单 创建完毕后,还可以设定其 字体、对齐方式、图标等,

    还要对具体的 菜单项 指定动作(添加 actionPerformed 事件)

       

    如:为 Close 菜单项添加 actionPerformed 事件,当点击 Close 时,关闭程序

       

       

       

    运行程序:

       

       

       

       

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不 死,问每个月的兔子总数为多少?
    Tomcat 全攻略
    MySQL 查询in操作,查询结果按in集合顺序显示
    乱码问题解决之道
    Java程序员面试中的多线程问题
    APACHE多个服务器的配置
    Python读写文件
    php字符串处理函数大全
    python 执行系统命令
    jquery-mobile
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6670925.html
Copyright © 2011-2022 走看看