你为什么不像有些程序那样,固定最近打开文件的记录数,比如只保存5个最近打开的文件.那就不用根据你的app.history.getRecentFiles()大小来确定最近打开的文件数,也就减少了你的菜单项了.我看你好像是根据菜单项的文本来打开文件的.你可以再每次打开文件的操作你把最近菜单项作个递推的循环,比如把菜单1赋给菜单2,菜单2赋给菜单3........,一直递推到菜单项的的最后一项,或者更简单的方法就是删除菜单项的最后一项,载第一项菜单前添加你打开的这个文件的菜单(我说的这些菜单项都是针对最近文件菜单下的子菜单而言的).不知道你懂我的意思没?????

解决方案 »

  1.   

    我帮你找了,JMenu有个insert()方法,里面传入你要插入的位置的序号就可以了,也有remove()方法,传入序号和名字都可以.这样的话,用我说的第二种方法要简单多了.你说呢????
      

  2.   

    To noratong(诺拉) 
    1.根据JMenu.getItems()等方法,确实可以判断当前文件菜单的子菜单的
      多少,然后顺序地将各个子菜单赋值,或者删除掉最后一个子菜单,插入
      一个新子菜单到最前面.
    2.但是这样的话,需要在应用程序关闭的时候,将菜单信息写入History.
      应用程序启动时,从History中读出前次的"最近文件".
    3.这样可以显著减少对History的操作.(只需要在程序的开始和结束
      各访问一次)
    不知是不是这个意思?还有一些疑问是:
    不管怎样,在用户打开一个文件后,总是要new一个子菜单,在我的程序中,这
    会造成内存问题吗?你知道用户打开文件的操作可能是频繁的.可否给我讲
    讲我的程序函数中的那个内部类的资源占用和释放情况.inner类可否指点
    一番?
      

  3.   

    那几个最近菜单项必须保存下来,这是毫无疑问的.因为每次运行程序都要根据这些菜单项来建立菜单.至于你考虑的情况,我觉得应该不会有很大问题,因为我们并没有改变菜单项的数量.而只是简单的替换.内存不会变大.那个内部类的资源情况我也不是很清楚,我不知道你说的是那个内部类???Sorry.
      

  4.   

    内部类就是:      item.addActionListener(new ActionListener()
    中涉及的那个类
      

  5.   

    哦,你说的这个类,至于它的资源消耗情况我也不是很清楚,因为我对一般的类的资源消耗情况都不是很清楚.不过我个人觉得内部类应该不会比一般的类消耗更多的资源,因为它毕竟也是个类,而且我记得原来老师说过,类并不占很多内存空间,因为它只是个声明,而真正占内存空间的是类生成的实例.不知道我这样说对不对.我想内部类也部会特殊.就我个人认为内部类和外部类没多大区别,只不过方便一个类访问另一个类的内部成员而已.而且内部类一般只用来处理事件监听器,当然也可以用作别的方面.不过我要提醒你的是你所说的这种形式的类:item.addActionListener(new ActionListener(),应该不叫内部类才对,应该叫匿名类.真正的内部类是有完整的类的定义的.更一般类没什么区别,只不过写在一个类的内部而已.而匿名类只是一种类的简写形式,一般只用于只带有一个方法的类,而且你也应该注意到匿名类不方便自己写构造函数,也就相当于没有构造函数,有也是系统提供的缺省的构造函数,很不方便.好,我就说这么多吧,纯属个人看法,如有错误,敬请原谅.