神龙剑士 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日

悬赏问题

  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 游戏盾如何溯源服务器真实ip?
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL
  • ¥15 抖音看过的视频,缓存在哪个文件