我有一个窗体 里面有一个JDesktopPane,然后可以通过菜单来生成添加很多InternalFrame,由于InternalFrame多了会很乱,我想通过JDesktopPane管理,使得InternalFrame永远只能只有一个激活,如果单击菜单显示新的InternalFrame时,会自动关闭原来的InternalFrame,这该怎么实现,有高手会么

解决方案 »

  1.   

    插入新的InternalFrame前用JDesktopPane的getAllFrames()方法拿所有的InternalFrame引用,然后setVisible(false),或者将其移除。
    你试一下,应该可以的。
      

  2.   

    请问一下setVisible方法,是不是该InternalFrame实例是不是仍然占内存,如果很多InternalFrame实例 那不是很占内存吗?
      

  3.   

    实例是还在阿,这个没办法的。除非你把实例从JDesktopPane移除,否则实例一直存在。
    针对你的问题我还有一种方案,就是第一次菜单动作的时候插入一个InternalFrame,以后如果判断到已经有一个InternalFrame实例了,就不继续生成InternalFrame,而是生成一个JPanel替换InternalFrame实例上的panel,这样也可以解决你的问题。
      

  4.   

    public void onlyOneFrame() { if (theDesktop.getAllFrames().length > 1) {
    /**
     * ?里一定要用"theDesktop.getAllFrames().length-1",
     * 否?数?越界!
     */
    for (int i = 1; i <= theDesktop.getAllFrames().length - 1; i++) {
    /**
     * ?里一定要用"I-1",使最新的窗口出?!原来窗口?藏 
     */
    theDesktop.getAllFrames()[i - 1].setVisible(false); } } }