我想做一个弹出式菜单,代码如下:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class MenuItems extends JApplet 
{
public void init()
{
// JPanel jp1=new JPanel();
// this.add(jp1);
Icon newIcon=new ImageIcon("F:\\图标\\系统图标\\74.gif","新建文档");
Icon openIcon=new ImageIcon("F:\\图标\\系统图标\\8.gif","打开文档");

JMenuBar jbar=new JMenuBar();
JMenu jmenu=new JMenu("File");

JMenuItem newItem=new JMenuItem("新建",newIcon);
JMenuItem openItem=new JMenuItem("打开……",openIcon);
JMenuItem saveItem=new JMenuItem("保存");
JMenuItem saveAsItem=new JMenuItem("另存为……");
JMenuItem exitItem=new JMenuItem("退出");

jmenu.add(newItem);
jmenu.add(openItem);
jmenu.add(saveItem);
jmenu.add(saveAsItem);
jmenu.addSeparator();
jmenu.add(exitItem);

jbar.add(jmenu);
setJMenuBar(jbar);

exitItem.addActionListener(new ActionListener()
     {
public void actionPerformed(ActionEvent a)
{
System.exit(0);
}
     }
);

JPopupMenu RPopupMenu=new JPopupMenu();
JMenuItem popItem1=new JMenuItem("弹出菜单项1");
JMenuItem popItem2=new JMenuItem("弹出菜单项2");
JMenuItem popItem3=new JMenuItem("弹出菜单项3");
RPopupMenu.add(popItem1);
RPopupMenu.add(popItem2);
RPopupMenu.add(popItem3);
popItem2.setEnabled(false);

addMouseListener(new MouseAdapter()
  {
public void mouseCliced(MouseEvent m)
{
    if(m.getButton()==3)
RPopupMenu.show(m.getComponent(),m.getX(),m.getY());
                                //上面这句代码在Eclipse中老是报告:
                                //Cannot refer to a non-final variable RPopupMenu 
                                //inside an inner class defined in a different method
}
  }
);
}}
我用的是Eclipse3.0

解决方案 »

  1.   

    RPopupMenu 改成final 就不报错了!
      

  2.   

    不是改成,是添加.呵呵!JPopupMenu RPopupMenu=new JPopupMenu();
    改为:final JPopupMenu RPopupMenu=new JPopupMenu();
      

  3.   

    把那些菜单和菜单项做成成员变量不是很好?
    在鼠标监听类里面这些都要用到的,
    放在init里面作为局部变量,在匿名类里面肯定是访问不到的
      

  4.   

    RPopupMenu.show(this,m.getX(),m.getY());
    m.getComponent(),这里错了阿
    m是实践类,没有这个方法
    这个参数是要现实在这控件上