问题是这样的:
    在JFrame上建立了菜单,点击菜单项Open打开一个JInternalFrame,命名为internalFrame1,将internalFrame1最小化后,我想再次点击菜单项Open将最小化的internalFrame1显示为当前选中状态,且大小与最小化前一致,怎么办呢?我实验了很多,但是达不到这个效果,我的测试代码如下:  JDesktopPane desktop = new JDesktopPane();
  static final Integer DOCLAYER = new Integer(5);  /* 这是点击Open菜单的处理代码 */
  public void openInternalFrame1() {
    if (internalFrame1 == null) {
      internalFrame1 = new InternalFrame1();
      desktop.add(internalFrame1, DOCLAYER);      try {
        internalFrame1.setVisible(true);
        internalFrame1.setSelected(true);
      }
      catch (java.beans.PropertyVetoException ex) {
      }
    }
    else {
      internalFrame1.moveToFront();
    }
  }
  
    如果internalFrame1没有最小化,还显示原来状态,那在点击Open菜单项时还保持现在状态,相当于没有执行一样,和上面结合起来如何实现呢?请高手指点!

解决方案 »

  1.   

    试一下下面的代码,我没有测试:    if (internalFrame1 == null) {
          internalFrame1 = new InternalFrame1();
          desktop.add(internalFrame1, DOCLAYER);
        }    try {
          internalFrame1.setVisible(true);
          internalFrame1.setSelected(true);
        }
        catch (java.beans.PropertyVetoException ex) {
        }
      

  2.   

    yonghar(http://www.xio.name):
        你好,又碰上你了,你真是我的救星,呵呵!上次的问题就是你回答的,非常感谢!
        
        你把我的代码结构稍微修改了一下,我测试了,没有效果,我觉得这个问题不难,就差那么一点,需要高手点拨一下!我的测试代码要不发给你看看,邮箱!
      

  3.   

    需要在最小化后再还原成原来的窗口大小,那么需要知道原来的窗口的最后一次大小;
    可以这样做:
    继承JInternalFrame,覆盖reshape函数,JInternalFrame的位置和大小每次改变之前都会调用这个函数的
    public void reshape(int x, int y, int width, int height) {
               System.out.println("reshape");
               //在这里记录x,y,width,height
               super.reshape(x,y,width,height);
              
    }等需要还原成原来窗口的大小和位置,就这样做:
    jinternalframe.setBounds(x,y, width, height);
      

  4.   

    jplayer(ssssssss):
        这位仁兄,我的问题主要不是怎样还原JInternalFrame的大小和位置,而是:    我通过点击菜单Open生成了一个新的JInternalFrame,取名为internalFrame1,它是可以最小化的,我将它最小化后,它就会在JDesktopPane的左下角显示一个图标,此时手动点击此图标,internalFrame1就会显示出来,现在我想通过别的事件控制让它显示,比如还点击原来的菜单项Open将最小化的它显示出来,这个事件应该怎么写呢?有点郁闷!
      

  5.   

    各位兄弟,已经解决了!多些大家的回答!加上一条语句就可以了:internalFrame1.pack();