弹出菜单的创建与使用

-------------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】

时间: 2024-10-13 21:01:49

弹出菜单的创建与使用的相关文章

【转】android创建Popwindow弹出菜单的两种方式

方法一的Activity [java] view plaincopy package com.app.test02; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import

创建右键弹出菜单

①.添加一个菜单资源,ID为IDM_RIGHTMENU.因为在显示右键菜单时顶级菜单是不显示的,所以可以给它设置任意文本. ②.给视类添加WM_RBUTTONDOWN消息,在该消息中处理右键弹出菜单.因为视类窗口始终覆盖在框架窗口之上,框架窗口接收不到鼠标消息,所以由视类捕获WM_RBUTTONDOWN消息. void CMenuView::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CMenu

Android ListView两种长按弹出菜单方式

* 知识点1:ListView item:两种长按弹出菜单方式* 知识点2:ListView SimpleAdapter的使用*  知识点 3:在java代码中创建一个ListView*/ -----------------------------------------------------Activity[mw_shl_code=java,true]package org.gxl.com; public class ListOnLongClickActivity extends Activ

糍粑大叔的独游之旅-u3d实现弹出菜单(上)-动态列表

在u3d5.x中,使用ugui作为默认的界面系统,但控件实在太少,很多需求都不能满足,比如弹出菜单(PopupMenu) 我也懒得去网上找现成的实现,再加上现有代码已经有很多有关列表控件的功能,不想再重新动这些代码. 所以自己实现一个,目前先只实现核心.搭建控件相关类的骨干,后期再慢慢丰富和做的更花哨. 开篇之前声明,我的u3d理解非常有限,有很多也许本身自带的功能或有现成库功能我不知道,所以选择了自己探索或实现, 感觉太low欢迎给出好的意见. 定义和代码结构 PopupMenu是点击鼠标或按

iOS开发——实战技术OC篇&关于蒙板和弹出菜单

关于蒙板和弹出菜单 一:关于蒙板 蒙板的作用一般就是用来实现不能做其他操作还有一些模糊效果提示用户 我们只需要自定义一个View,并且创建两个类方法用来给外界调用实现显示和隐藏 + (void)show; + (void)hide; 显示:直接添加到window上,并且设置和window同样大小,然后设置相应的透明度(alpla) 1 + (void)show 2 3 { 4 5 6 7 8 9 iCocosCover *cover = [[self alloc] init]; 10 11 12

iOS_21团购_顶部菜单和弹出菜单联动

最后效果图: 各控件关系图1: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >\ 各控件关系图2: 点击Dock上面的buttonDockItem, 创建经导航控制器包装的DealListController, 而且加入到主控制器的右側空间 // // Deal

Swing-JPopupMenu弹出菜单用法-入门

弹出菜单是GUI程序中非常常见的一种控件.它通常由鼠标右击事件触发,比如在windows系统桌面上右击时,会弹出一个包含“刷新”.“属性”等菜单的弹出菜单.Swing中的弹出菜单是JPopupMenu,它的基本性质与JMenu类似,可以使用add方法给它内部添加JMenu或者JMenuItem.手动显示JPopupMenu时,需使用show(parentComponent, x, y)方法,指定父控件和显示坐标.用户的操作习惯是在右击某个 控件时显示弹出菜单,那么需要使用component.se

Android ListView 长按列表弹出菜单

Android ListView 长按列表弹出菜单 设置长按菜单 listView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.add(0, 0, 0, "删除单号"); menu.add

MFC右键弹出菜单

右键弹出菜单是指右键抬起的时候弹出的菜单.通常放置在Dialog的OnRButtonUp响应函数里. 下面就给出右键弹出菜单的实例: 1 添加右键事件及响应函数 可以用Class Wizard...来添加一个右键消息WM_RBUTTONUP,为其添加Handler,会自动生成OnRButtonUp响应函数 2 为弹出菜单添加资源 可以用"Resource View"中的"String Table"添加一个新的弹出菜单资源,这里假设资源ID : IDC_MENU_UP