在MFrame中写一个静态方法,然后在事件响应函数中调用。
class MFrame
{
   public static void close()
   {
     this.dispose();
   }
}
actionPerformed(ActionEvent e)
{
   MFrame.close();
}

解决方案 »

  1.   

    我试了一下还是有问题   public static void close()
       {
         this.dispose();
       }静态方法close()不调用dispose这个非静态的方法的,又不知道怎么办了。
      

  2.   

    MFrame是从哪个继承的?JFrame还是JApplet?
      

  3.   

    不太懂你的意思,menubar又是加在哪里?
      

  4.   

    public UIMenuBar()
    {
        ... ...
        protected JFrame parentFrame = null;
        public void setParentFrame(JFrame jFrame)
        {
            parentFrame = jFrame;
        }
        private void closeFrame()
        {
            jFrame.dispose();
            jFrame = null;
        }
    }
      

  5.   

    private void closeFrame()
        {
            parentFrame.dispose();
            parentFrame = null;
        }
      

  6.   

    但在UIMenuBar中还无法知道jFrame对象的,setParentFrame()方法必须要在MFrame里实例化UIMenuBar时调用了。我有个想法就是把UIMenuBar设计成一个单例类,那么从哪里都可以引用到那个MFrame实例了不知道你们在设计那种界面中单一控件如菜单样,工具栏等会否有意设计成一个单例类?
      

  7.   

    to pxboy(阿土仔) :
    这样理解好像跟搂主的有偏差。
    搂住的问题是:
    class MFrame extends JFrame
    {
       MFrame.setJMenuBar(new UIMenuBar())
    }另外有个UIMenuBar类,想在这个类里关闭MFrame产生的实例。
      

  8.   

    如果能用exit(),试试这样了。在MFrame中写一个静态方法,然后在事件响应函数中调用。
    class MFrame
    {
       public static void close()
       {
         System.exit(0);
       }
    }
    actionPerformed(ActionEvent e)
    {
       MFrame.close();
    }
      

  9.   

    个人认为计成一个单例类在需要调用到MainFrame的属性方法时就有点麻烦了。
    就像这个问题一样。
      

  10.   

    public UIMenuBar()
    {
        ... ...
        protected JFrame parentFrame = null;
        public void setParentFrame(JFrame jFrame)
        {
            parentFrame = jFrame;
        }
        private void closeFrame()
        {
            parentFrame.dispose();
            parentFrame = null;
        }
    }MFrame mFrame = new MFrame();
    UIMenuBar menuBar = new UIMenuBar();
    menuBar.setParentFrame(mFrame);
    mFrame.setJMenuBar();如果你想通用,就用接口来实现,
    public interface Closeable
    {
        public void close();
    }
    public class MFrame extends JFrame implements Closeable
    {
        ... ...
        public void close()
        {
            this.dispose();
        }
    }public class MApplet extends JApplet implements Closeable
    {
        ... ...
        public void close()
        {
            this.destroy();
        }
    }public UIMenuBar()
    {
        ... ...
        protected Closeable parentContainer = null;
        public void setParentContainer(Closeable container)
        {
            parentContainer = container;
        }
        private void closeFrame()
        {
            parentContainer.close();
            parentContainer = null;
        }
    }
      

  11.   

    接口可以有多少方法,这样每个容器不管是JFrame或JApplet还是其他的什么组件,都可以通过实现Closeable做清理工作,当然你也可以加上多个方法,这样在UIMenuBar里可以做更多的操作啦,setParentContainer(Closeable container);传递的是父容器的引用
      

  12.   

    to LoveRose(旺旺) 
    我不能关闭整个应用程序的,而且在applet也没有这种权限的。阿土仔的方法肯定是没问题的,但是突然之间我又想设计某些单例类,能够在任何时候都能获得某个类的唯一实例,我觉得那样会更简单一点吧。我去试试就知道,谢谢。
      

  13.   

    OK,采用的是把MFrame写成饿汉式单例类来实现的,多写了两三条语句就可以,问题解决,给分。