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()); //松开鼠标后弹出弹出式菜单。
}
}
}
正确代码结果:
有问题欢迎留言,共同进步。