Swing关闭和打开frame

1。

close frame

frame.dispose(); // not fire INTERNAL_FRAME_CLOSING event, but fire INTERNAL_FRAME_CLOSED event

frame.setClosed(
true ); // fire INTERNAL_FRAME_CLOSING event and INTERNAL_FRAME_CLOSED event

open frame
jDesktopPane.remove(frame);
jDesktopPane.add(frame);
frame.show();

在添加frame之前必须先把旧的移出父容器, 解除和原来父容器的联系. 否则会导致
illegal component position. ( 由于覆盖了原先添加的位置,虽然是同一个object).

// if frame not exist or closed
         if  (frame  ==   null || frame.isClosed())  {
            frame 
= new Frame();
            jDesktopPane.remove(frame);
            jDesktopPane.add(frame);
            frame.setVisible(
true);
        }

        
        
// if not create new frame object use following
        
// if (!frame.isShowing()){
        
//     jDesktopPane.remove(frame);
        
//     jDesktopPane.add(frame);
        
//     frame.setVisible(true);
        
// }

// to active the frame
         try   {
            frame.setSelected(
true);
        }
  catch  (Exception e)  {
            e.printStackTrace();
        }




2。

如果从frame的子容器中的button等去关闭frame,要用
JInternalFrame parent  =  (JInternalFrame) this .getRootPane().getParent(); // 得到frame
        parent.dispose();

先得到子控件的顶窗格,rootPane的parent才是上层的frame控件。 如果直接用this.getParent()得到的只是包含这个控件的容器(JPanel等)。



3。

通过Matisse在一个class中添加多个frames, eclipse中在design view状态下右键outline 中Other Components去添加其他控件,包括internal frame。



4。

frame

isClosed() 验证是否关闭,没建立frame实例是,return false。 当建立实例后,frame显示则return false,frame dispose后return true

isShowing() 验证是否显示,不再desktop或其他container中显示,这return false。

激活active a frame 使用:
setSelected(true)






你可能感兴趣的:(Swing关闭和打开frame)