W3CHINA Blog首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
One blog (or more) a day, keep bad mood away, and make life wonderful!
-- by 小生

Blog正在逐步成长中,小生与您共享思维火花,畅想IT时代!

我的分类(专题)

日志更新

最新评论

留言板

链接

我的Blog:
CNBlog
Google Blog
MSN

友情Blog:
.Net的新生活
辉辉天地
彼岸


Blog信息
blog名称:小生杂谈
日志总数:166
评论数量:377
留言数量:1
访问次数:1011916
建立时间:2004年11月7日





[编程技术]Java中MDI的实现
原创空间,  软件技术

Wonderow 发表于 2004/12/14 22:46:46

MDI,Multiple Document Interface(多文档界面)与SDI相对,应用也很广泛。像Word XP以前的版本都是用MDI(之后的版本应该也算MDI,但形式有些不同,看起来像SDI),VS/VS.Net等很多软件也都是MDI,其方便显而易见,即可以在一个窗体中的有限空间里提供多个文档同时编辑使用的功能。  一般的编程语言都会提供显著的MDI功能,但Java似乎不那么明显,问了一些经常使用Java的同学居然一时也没说上来如何实现。于是借助网络的强大力量,我们知道了在Swing中提供了JDesktopPane和JInternalFrame,结合使用即可实现MDI的效果。  代码是简单的,先在主窗体(可是以一个JFrame)中加入一个JDesktopPane,为MDI“提供活动的空间”: 500)this.width=500'>JDesktopPane desktop = new JDesktopPane ();500)this.width=500'>??.add(desktop);  这里的??可以是任意的Container,这一点Java就显得很自由,很灵活,可以在很多地方创建这样的一个DesktopPane。  当然,如果想这个Pane在需要时可以滚动,可以使用常用的技巧,把它加入一个JScrollPane,这里比较特殊,需要重载它的preferredSizeOfAllFrames函数才能获得正确的尺寸,才有正确的滚动效果: 500)this.width=500'>public class JDesktop extends JDesktopPane500)this.width=500'>{500)this.width=500'>    public void paint(Graphics g)500)this.width=500'>    {500)this.width=500'>        super.paint(g);500)this.width=500'>        Dimension d = preferredSizeOfAllFrames();500)this.width=500'>        this.setPreferredSize(d);500)this.width=500'>        this.revalidate();500)this.width=500'>500)this.width=500'>    }500)this.width=500'>500)this.width=500'>  /**500)this.width=500'>   * @return 返回最佳desktop尺寸..500)this.width=500'>   */500)this.width=500'>    public Dimension preferredSizeOfAllFrames()500)this.width=500'>    {500)this.width=500'>        JInternalFrame [] array = getAllFrames();500)this.width=500'>500)this.width=500'>        int maxX = 0;500)this.width=500'>        int maxY = 0;500)this.width=500'>        for (int i = 0; i < array.length; i++)500)this.width=500'>        {500)this.width=500'>            if ( array[ i ].isVisible() )500)this.width=500'>            {500)this.width=500'>                int cx;500)this.width=500'>                cx = array[i].getX();500)this.width=500'>                int x = cx + array[i].getWidth();500)this.width=500'>                if (x > maxX) maxX = x;500)this.width=500'>                int cy;500)this.width=500'>                cy = array[i].getY();500)this.width=500'>                int y = cy + array[i].getHeight();500)this.width=500'>                if (y > maxY) maxY = y;500)this.width=500'>            }500)this.width=500'>        }500)this.width=500'>        return new Dimension(maxX, maxY);500)this.width=500'>    }500)this.width=500'>}500)this.width=500'>(这是一位网友陈先波的代码)  然后可以往里加入子窗口JInternalFrame了: 500)this.width=500'>JInternalFrame frame = new ??();500)this.width=500'>desktop.add(frame);500)this.width=500'>try{500)this.width=500'>frame.setVisible(true);500)this.width=500'>frame.setSelected(true);500)this.width=500'>}catch(java.beans.PropertyVetoException ex){}500)this.width=500'>  这里的??可以是任何继承JInternalFrame的类。  具体可以查看JDK的demo/jfc/metaworks例子,或JDK关于JInternalFrame的帮助。


阅读全文(2397) | 回复(1) | 编辑 | 精华
 


回复:Java中MDI的实现
原创空间,  软件技术

xinhao5(游客)发表评论于2005/3/5 12:14:07

对我很有帮助,谢谢


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144790199 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号