kooyee ‘s blog

开源软件, 众人努力的结晶, 全人类的共同财富
posts - 103, comments - 55, trackbacks - 0, articles - 66
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Swing关闭和打开frame

Posted on 2008-02-23 23:30 kooyee 阅读(1703) 评论(1)  编辑  收藏 所属分类: Swing/Applet
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)







评论

# re: Swing关闭和打开frame  回复  更多评论   

2008-07-18 10:23 by 游客
谢谢`` 找了很多,就这个派上用场 帮我解决问题咯!

只有注册用户登录后才能发表评论。


网站导航: