您的位置:首页 > 其它

弹出菜单的创建与使用

2017-04-05 22:01 381 查看
-------------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 staticvoid main(String[] args) {

EventQueue.invokeLater(new Runnable() {

publicvoid 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

publicvoid 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() {

publicvoid 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 staticvoid addPopup(Component component,
final JPopupMenu popup) {

component.addMouseListener(new MouseAdapter() {

//鼠标右键点击弹框

publicvoid mousePressed(MouseEvent e) {

if (e.isPopupTrigger()) {

showMenu(e);

}

}

//鼠标右键点击弹框

publicvoid mouseReleased(MouseEvent e) {

if (e.isPopupTrigger()) {

showMenu(e);

}

}

privatevoid 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】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: