JAVA弹出式菜单显示异常

JAVA弹出式菜单显示异常

问题现象:
在文本区点击右键或者左键均可弹出弹出式菜单,并且显示方式异常。

如:
在这里插入图片描述
问题出现条件:

  • 在窗体中没有先加入弹出式菜单,而是先加入其他组件,如文本区(JTextArea)。

问题原因:
链接: 链接地址.

这是我写的另一篇博客,问题原因大致相同。

解决方法:

  • 在窗体中先加入弹出式菜单组件再加入其他组件.

错误代码示例:

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class PopupMenuException extends JFrame{
    static JPopupMenu jm=new JPopupMenu();     //创建弹出式菜单
    static JMenuItem jm1=new JMenuItem("红色");    //创建菜单选项
    static JMenuItem jm2=new JMenuItem("蓝色");
    static JMenuItem jm3=new JMenuItem("绿色");
    static JTextArea ja=new JTextArea("CSDN弹出式菜单异常处理!!!!",5,20);  //创建文本区

    PopupMenuException()
    {
        super("弹出式菜单异常处理");            //调用父类构造方法,即JFrame
/**********************重点********************************************/
        add(ja);add(jm);            //窗体中先加入文本区,再加入弹出式菜单
/**********************重点********************************************/

        Handle handle =new Handle();            //创建Handle类对象
        ja.addMouseListener(handle);            //对文本区实现监听

        jm.add(jm1);jm.add(jm2);jm.add(jm3);     //菜单项加入到弹出式菜单

        setBounds(400,400,300,200);      //设置窗体面积和大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        PopupMenuException p=new PopupMenuException();
    }

    class Handle extends MouseAdapter
    {
        @Override
        public void mouseReleased(MouseEvent e) {       //松开鼠标时做的事件

            jm.show((Component)e.getSource(),e.getX(),e.getY());   //松开鼠标后弹出弹出式菜单。
        }
    }
}

正确代码示例:

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class PopupMenuException extends JFrame{
    static JPopupMenu jm=new JPopupMenu();     //创建弹出式菜单
    static JMenuItem jm1=new JMenuItem("红色");    //创建菜单选项
    static JMenuItem jm2=new JMenuItem("蓝色");
    static JMenuItem jm3=new JMenuItem("绿色");
    static JTextArea ja=new JTextArea("CSDN弹出式菜单异常处理!!!!",5,20);  //创建文本区

    PopupMenuException()
    {
        super("弹出式菜单异常处理");        //调用父类构造方法,即JFrame
/*****************************重点***********************************/
        add(jm);add(ja);          //窗体中先加入弹出式菜单,再加入文本区
/****************************重点************************************/
        Handle handle =new Handle();            //创建Handle类对象
        ja.addMouseListener(handle);            //对文本区实现监听

        jm.add(jm1);jm.add(jm2);jm.add(jm3);     //菜单项加入到弹出式菜单

        setBounds(400,400,300,200);      //设置窗体面积和大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        PopupMenuException p=new PopupMenuException();
    }

    class Handle extends MouseAdapter
    {
        @Override
        public void mouseReleased(MouseEvent e) {       //松开鼠标时做的事件

            jm.show((Component)e.getSource(),e.getX(),e.getY());   //松开鼠标后弹出弹出式菜单。
        }
    }
}

正确代码结果:
在这里插入图片描述
有问题欢迎留言,共同进步。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值