弹出式菜单由 JPopupMenu 类实现,它是一个可弹出并显示一系列选项的小窗口。它还用于当用户选择菜单项并激活它时显示的“右拉式(pull-right)”菜单,可以在想让菜单显示的任何其他位置使用。
本文参考:http://c.biancheng.net/view/1245.html
package swing;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
/**
* 弹出式菜单
*/
public class Demo26_JPopuMenu extends JFrame{
JMenu fileMenu;//文件菜单
JPopupMenu jPopupMenuOne;//弹出式菜单对象
JMenuItem openFile,closeFile,exit;//菜单项:打开,关闭,退出
JRadioButtonMenuItem copyFile,pasteFile;//单选按钮:复制,粘贴
ButtonGroup buttonGroupOne;//单选按钮组
public static void main(String[] args) {
new Demo26_JPopuMenu();
}
public Demo26_JPopuMenu() {
jPopupMenuOne=new JPopupMenu(); //创建jPopupMenuOne对象
buttonGroupOne=new ButtonGroup();
//创建文件菜单及子菜单,并将子菜单添加到文件菜单中
fileMenu=new JMenu("文件");
openFile=new JMenuItem("打开");
closeFile=new JMenuItem("关闭");
fileMenu.add(openFile);
fileMenu.add(closeFile);
//将fileMenu菜单添加到弹出式菜单中
jPopupMenuOne.add(fileMenu);
//添加分割符
jPopupMenuOne.addSeparator();
//创建单选菜单项,并添加到ButtonGroup对象中
copyFile=new JRadioButtonMenuItem("复制");
pasteFile=new JRadioButtonMenuItem("粘贴");
buttonGroupOne.add(copyFile);
buttonGroupOne.add(pasteFile);
//将copyFile添加到jPopupMenuOne中
jPopupMenuOne.add(copyFile);
//将pasteFile添加到jPopupMenuOne中
jPopupMenuOne.add(pasteFile);
jPopupMenuOne.addSeparator();
exit=new JMenuItem("退出");
//将exit添加到jPopupMenuOne中
jPopupMenuOne.add(exit);
//创建监听器对象
MouseListener popupListener=new PopupListener(jPopupMenuOne);
//向主窗口注册监听器
this.addMouseListener(popupListener);
this.setTitle("弹出式菜单");
SwingUtils.setCenter(this);//设置窗体大小600*800并居中
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//添加内部类,其扩展了MouseAdapter类,用来处理鼠标事件
class PopupListener extends MouseAdapter{
JPopupMenu popupMenu;
PopupListener(JPopupMenu popupMenu){
this.popupMenu=popupMenu;
}
public void mousePressed(MouseEvent e){
showPopupMenu(e);
}
public void mouseReleased(MouseEvent e){
showPopupMenu(e);
}
private void showPopupMenu(MouseEvent e){
if(e.isPopupTrigger()){
//如果当前事件与鼠标事件相关,则弹出菜单
popupMenu.show(e.getComponent(),e.getX(),e.getY());
}
}
}
}
效果如下: