• Java中MDI的实现


      MDI,Multiple Document Interface(多文档界面)与SDI相对,应用也很广泛。像Word XP以前的版本都是用MDI(之后的版本应该也算MDI,但形式有些不同,看起来像SDI),VS/VS.Net等很多软件也都是MDI,其方便显而易见,即可以在一个窗体中的有限空间里提供多个文档同时编辑使用的功能。

      一般的编程语言都会提供显著的MDI功能,但Java似乎不那么明显,问了一些经常使用Java的同学居然一时也没说上来如何实现。于是借助网络的强大力量,我们知道了在Swing中提供了JDesktopPane和JInternalFrame,结合使用即可实现MDI的效果。

      代码是简单的,先在主窗体(可是以一个JFrame)中加入一个JDesktopPane,为MDI“提供活动的空间”:
    JDesktopPane desktop = new JDesktopPane ();
    ??.add(desktop);
      这里的??可以是任意的Container,这一点Java就显得很自由,很灵活,可以在很多地方创建这样的一个DesktopPane。
      当然,如果想这个Pane在需要时可以滚动,可以使用常用的技巧,把它加入一个JScrollPane,这里比较特殊,需要重载它的preferredSizeOfAllFrames函数才能获得正确的尺寸,才有正确的滚动效果:
    public class JDesktop extends JDesktopPane
    {
        public 
    void paint(Graphics g)
        {
            super.paint(g);
            Dimension d 
    = preferredSizeOfAllFrames();
            
    this.setPreferredSize(d);
            
    this.revalidate();

        }

      
    /**
       * @return 返回最佳desktop尺寸..
       
    */
        public Dimension preferredSizeOfAllFrames()
        {
            JInternalFrame [] array 
    = getAllFrames();

            
    int maxX = 0;
            
    int maxY = 0;
            
    for (int i = 0; i < array.length; i++)
            {
                
    if ( array[ i ].isVisible() )
                {
                    
    int cx;
                    cx 
    = array[i].getX();
                    
    int x = cx + array[i].getWidth();
                    
    if (x > maxX) maxX = x;
                    
    int cy;
                    cy 
    = array[i].getY();
                    
    int y = cy + array[i].getHeight();
                    
    if (y > maxY) maxY = y;
                }
            }
            
    return new Dimension(maxX, maxY);
        }
    }
    (这是一位网友陈先波的代码)

      然后可以往里加入子窗口JInternalFrame了:
    JInternalFrame frame = new ??();
    desktop.add(frame);
    try{
    frame.setVisible(
    true);
    frame.setSelected(
    true);
    }
    catch(java.beans.PropertyVetoException ex){}
      这里的??可以是任何继承JInternalFrame的类。
      具体可以查看JDK的demo/jfc/metaworks例子,或JDK关于JInternalFrame的帮助。

  • 相关阅读:
    NND,优酷效果实在太差了
    技术人员创业的短板
    【上架通知】天轰穿.NET4趣味编程视频教程VS2010轻松学习C#零基础
    最新课程信息 课堂风格视频教程,中规中矩的教学思路设计和插诨打科的讲解方式
    Visual Studio 2010 Ultimate 中文旗舰版——提供下载地址和KEY
    整整半个月了
    学云网五一特惠活动,很喜感的图
    学员就业>我心纠结
    委托的定义和使用入门天轰穿
    第八 讲 : 流程控制循环语句 【天轰穿.Net4趣味编程系列视频教程vs2010轻松学习C#】
  • 原文地址:https://www.cnblogs.com/wonderow/p/77210.html
Copyright © 2020-2023  润新知