神龙剑士 2023-02-19 19:32 采纳率: 85.7%
浏览 34
已结题

Java swing 弹出菜单栏显示问题

想要实现鼠标点击按钮就弹出式菜单栏,并且菜单栏要显示在最表层,但是弹出式菜单栏显示有问题,求指教
 
 
 
import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import java.util.*;
import java.awt.event.*;
import java.net.URL;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.*;
 
//游戏界面
public class w3 extends JFrame{
    //游戏窗口 绝对坐标  相对坐标
    
    
    public w3(){
        
        JFrame j=new JFrame();
        Icon icon=new ImageIcon("npc1.png");
        JButton a1=new JButton();//
        j.setSize(1000, 600);
        j.setUndecorated(true);//窗体无边框
        
        j.setDefaultCloseOperation(2);//窗体关闭方式
        j.setLocationRelativeTo(null);//窗体居中
        j.setResizable(false);//用户禁止拉伸窗体
        j.setLayout(null);
        
        a1.setIcon(icon);
        a1.setBounds(500,220,66,161);
        j.add(a1);
        
        
        
        
    
 //创建一个JPopupMenu菜单
        JPopupMenu q=new JPopupMenu();
         //创建三个JMenuItem菜单项
         
         //向JPopupMenu菜单添加菜单项在创建菜单项时,通常会采用构造方法JMenuItem为菜单项指定文本内容。
         //因为JMenuItem是继承AbstractButton类的,所
         //以可以吧它看作一个按钮,可以用无参的构造方法创建一个菜单项,可以调用从AbstractButton类中继承的setText(String text)方法和setItem()方法为其设置文本和图标。
        
         JMenuItem q1=new JMenuItem("对话");
         JMenuItem q2=new JMenuItem("商店");
         JMenuItem q3=new JMenuItem("强化装备");
         JMenuItem q4=new JMenuItem("学习技能");
         JMenuItem q5=new JMenuItem("任务");
   
         q.add(q1);
         q.addSeparator();
         q.add(q2);
         q.addSeparator();
         q.add(q3);
         q.addSeparator();
         q.add(q4);
         q.addSeparator();
         q.add(q5);
        
         a1.add(q);
         
        q.setInvoker(a1);
        q.setLocation(300,200);
        /*
         //向JFrame窗口添加键盘事件监听器
       j.addKeyListener(new KeyAdapter() {
            
             public void keyPressed(KeyEvent e) {
                 //通过值匹配,当点击右键的时候,显示JPopupMenu菜单
                if(e.getKeyCode() == KeyEvent.VK_F1){
                 //创建一个JPopupMenu菜单
                    new w4(); 
             }}
         });
         */
         
            //mouseEntered 当鼠标进入组件时调用
            //mousePressed 在组件上按下鼠标按钮时调用
            //mouseReleased 在组件上释放鼠标按钮时调用
            //mouseClicked 在组件上单击(按下并释放)鼠标按钮时调用
            //mouseExited 当鼠标退出组件时调用
         
       a1.addMouseListener(new MouseAdapter() {
        
 
             public void mousePressed(MouseEvent e) {
                 //通过值匹配,当点击左键的时候,显示JPopupMenu菜单
                
                if(e.getButton()==e.BUTTON1){
                     JPopupMenu q=new JPopupMenu();
                      
                     
            
                 
             }}
         });
 
    
    
//事件源.添加事件监听器接口(适配器);
 
    
 
j.setVisible(true);//窗体可见
    
    }//w3构造方法
 
    
    
    public static void main(String[]args){
        new w3();
    }//主方法
    
}
/*
    public static void main(String[]args){
        new w2();
    }
*/
  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-02-19 19:49
    关注

    该回答引用ChatGPT
    试一下 这个 代码

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class PopupMenuExample extends JFrame {
        private JButton button;
        private JPopupMenu popupMenu;
    
        public PopupMenuExample() {
            // 创建一个按钮
            button = new JButton("Click me");
            // 创建一个弹出式菜单栏
            popupMenu = new JPopupMenu();
            popupMenu.add(new JMenuItem("Item 1"));
            popupMenu.add(new JMenuItem("Item 2"));
            popupMenu.add(new JMenuItem("Item 3"));
    
            // 为按钮添加鼠标点击事件监听器
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    // 在鼠标位置弹出菜单栏
                    popupMenu.show(button, e.getX(), e.getY());
                }
            });
    
            // 将按钮添加到 JFrame 的内容面板
            getContentPane().add(button, BorderLayout.CENTER);
    
            // 设置 JFrame 的一些基本属性
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(300, 200);
            setLocationRelativeTo(null);
            setVisible(true);
        }
    
        public static void main(String[] args) {
            new PopupMenuExample();
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月28日
  • 已采纳回答 2月20日
  • 修改了问题 2月19日
  • 创建了问题 2月19日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装