JPopupMenu
- JPopupMenu弹出式菜单和下拉式菜单一样,都通过调用add()方法添加JMenuItem菜单项,但它默认是不可见的。如果想要显示出来,则必须调用它的show(Component invoker,int x,int y)方法,该方法中参数invoker表示JPopupMenu菜单显示位置的参考组件,x和y表示invoker组件坐标空间中的一个坐标,显示的是JPopupMenu菜单的左上角坐标。
- 使用这个最重要的就是这个顶级窗口和JPopupMenu都必需注册鼠标事件, 不然就不能符号我们的预期效果
popupMenu.addMouseListener(this);
this.addMouseListener(this);
- 最根本的依据就是在鼠标事件处理里面的mouseReleased方法里
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("释放一次鼠标");
if (e.isPopupTrigger()) {
popupMenu.show(this, e.getX(), e.getY());
}
}
简单演示
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class JPopupMenuDemo extends JFrame implements MouseListener {
private JPopupMenu popupMenu;
private JMenu[] menus;
public JMenuItem[] items1;
public JMenuItem[] items2;
public JPopupMenuDemo() {
this.setSize(400, 500);
this.setLayout(null);
init();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void init() {
String[] menuNames = new String[] {"操作" ,"设置"};
menus = new JMenu[menuNames.length];
for (int i = 0; i < menuNames.length; i++) {
menus[i] = new JMenu(menuNames[i]);
}
popupMenu = new JPopupMenu();
String[] names = new String[] {"复制", "剪切", "粘贴", "删除"};
items1 = new JMenuItem[names.length];
for (int i = 0; i < names.length; i++) {
items1[i] = new JMenuItem(names[i]);
menus[0].add(items1[i]);
}
popupMenu.add(menus[0]);
String[] menuNames2 = new String[] {"放大", "缩小"};
items2 = new JMenuItem[menuNames2.length];
for (int i = 0; i < menuNames2.length; i++) {
items2[i] = new JMenuItem(menuNames2[i]);
menus[1].add(items2[i]);
}
popupMenu.add(menus[1]);
popupMenu.addMouseListener(this);
this.addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("释放一次鼠标");
if (e.isPopupTrigger()) {
popupMenu.show(this, e.getX(), e.getY());
}
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
