创建弹出式菜单和创建菜单栏的步骤基本相似,只是在创建菜单栏时第一步创建的是JMenuBar类的对象,而创建弹出式菜单的第一步创建的是JPopupMenu类的对象,然后通过为需要弹出该菜单的组件添加鼠标事件监听器,在捕获弹出菜单事件时弹出该菜单。
import java.util.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyVetoException;
import java.net.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.tree.*;
public class t3 extends JFrame{
private JLabel label = new JLabel("请在窗口中单击鼠标右键!");
private JPopupMenu popupMenu = new JPopupMenu();// 创建弹出式菜单对象
private JMenuItem cutItem = new JMenuItem("剪切");//创建菜单项
private JMenuItem copyItem = new JMenuItem("复制");
private JMenuItem pastItem = new JMenuItem("粘贴");
private JMenu editMenu = new JMenu("编辑");///创建菜单对象
private JMenuItem readItem = new JMenuItem("只读");
private JMenuItem writeItem = new JMenuItem("可写");
private JMenu fontMenu = new JMenu("字体");
private JMenuItem boldfacedItem = new JMenuItem("加粗");
private JMenuItem italicItem = new JMenuItem("斜体");
public t3() {
setTitle("选项卡面板");
setBounds(400, 400, 400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cutItem.addActionListener(new ItemListener());
copyItem.addActionListener(new ItemListener());
pastItem.addActionListener(new ItemListener());
readItem.addActionListener(new ItemListener());
writeItem.addActionListener(new ItemListener());
popupMenu.add(cutItem);
popupMenu.add(copyItem);
popupMenu.add(pastItem);
popupMenu.add(editMenu);
editMenu.add(readItem);
editMenu.add(writeItem);
editMenu.add(fontMenu);
boldfacedItem.addActionListener(new ItemListener());
fontMenu.add(boldfacedItem);
italicItem.addActionListener(new ItemListener());
fontMenu.add(italicItem);
add(label);
// 为窗体的顶层容器添加鼠标事件监听器
addMouseListener(new MouseAdapter() {
// 鼠标按键被释放时触发该方法
public void mouseReleased(MouseEvent e) {
// 判断此次鼠标事件是否为该组件的弹出菜单触发事件
// 如果是则在释放鼠标的位置弹出菜单
if (e.isPopupTrigger())
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
});
setVisible(true);
}
//事件监听器,用于输出所点击的菜单项的名称
private class ItemListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
JMenuItem menuItem = (JMenuItem) e.getSource();//获取所点击的菜单项
System.out.println("您单击的是菜单项:" + menuItem.getText());
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
t3 test = new t3();
}
}