效果就应是这样.
当jpment.add(newMenu)时,newMenu就被从原父容器(fileMenu)中删掉了.如果你想两个都有,相信还是定义两个最方便,如果都要监听事件,可以用一个Action.

解决方案 »

  1.   

    别再想了
    听我的没错.
    这有什么麻烦的呢,如果你只是想显示,就new两个好了
    如果你需要监听事件,一般都是actionlistener,两个公用一个Action不就好了.
      

  2.   

    JMenuItem newMenu=new JMenuItem("打开");
    JMenu fileMenu=new JMenu("文件");
    fileMenu.add(newMenu);
    JPopupMenu jpment= fileMenu.getPopupMenu();
      

  3.   

    我就是想要楼上说的那种结果,但楼上的回复还有一点错,就是用JPopupMenu显示过后JMenu里面便什么也没有了,还能再改进吗?
      

  4.   

    public void showPopupMenu(Component invoker, JMenu menu, Point p) {
        JPopupMenu popMenu = menu.getPopupMenu();
        Component old_invoker = popMenu.getInvoker();
        popMenu.show(invoker, p.x , p.y );
        popMenu.setInvoker(old_invoker);
    }