java中MDI的实现

原创 2007年10月10日 14:09:00
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的帮助。 

 

引自:http://www.cnblogs.com/wonderow/archive/2004/12/14/77210.html

python3+PyQt5 实现多文档界面(MDI)

本文是对《Python Qt GUI快速编程》的第9章的多文档界面的例子texteditor用Python3+PyQt5进行改写。...
  • xiaoyangyang20
  • xiaoyangyang20
  • 2017年01月22日 16:51
  • 3399

C#之二十一 创建MDI应用程序和组件开发

MDI应用程序介绍 在VC#中,MDI应用程序由两部分组成,即MDI父窗体和MDI子窗体。 一个MDI应用程序可以包含一个或多个MDI父窗体,每个MDI父窗体又可以包含多个MDI子...
  • zhangchen124
  • zhangchen124
  • 2016年05月03日 10:33
  • 3079

使用Qt实现MDI风格的主窗体

文章来源:http://hi.baidu.com/wuyunju/item/3d20164c99a276f6dc0f6c52 QT提供了MDIArea控件可以很方便的实现标准的MDI窗体,但用起来并不...
  • libaineu2004
  • libaineu2004
  • 2014年02月21日 15:05
  • 2161

Java中MDI的实现

Java中MDI的实现   MDI,Multiple Document Interface(多文档界面)与SDI相对,应用也很广泛。像Word XP以前的版本都是用MDI(之后的版本应该也算MDI,...
  • jiangwzh
  • jiangwzh
  • 2012年04月09日 18:00
  • 802

Java MDI简易文件编辑器

  • 2013年05月02日 15:54
  • 14KB
  • 下载

使用QT实现MDI风格的主窗体

QT提供了MDIArea控件可以很方便的实现标准的MDI窗体,但用起来并不方便.感觉像360浏览器一样通过页签来切换子窗体的方式比较好.点击菜单项或工具栏上的按钮创建新的页签,并生成一个子窗体.点击页...
  • henreash
  • henreash
  • 2012年05月31日 09:21
  • 13171

菜单 MDI多文档界面 Random产生随机数 imagebox实现图片上下切换

1 菜单:MenuStrip 2 MDi(多文档界面) 1)设置Form1位父窗口:将属性中IsMdiContainer设置为True  2)添加3个Windows窗体作为子类窗口,并设...
  • panna_linda
  • panna_linda
  • 2017年12月23日 09:33
  • 28

使用Win32 API 实现MDI程序

http://www.codeproject.com/KB/winsdk/Sigma.aspx  使用Win32 API 实现MDI程序  介绍     这篇文章讲解了如何使用Win32...
  • dreamcs
  • dreamcs
  • 2011年07月15日 12:38
  • 3015

VC的MDI中实现动态切换文档视图

今天要实现一个功能,如下图所示: 在1中点击Screen0,然后2中的视图如果视图Screen0存在,则激活Screen0窗口,如果不存在这新建一个Screen0窗口并显示。 实现代码: 第一步:...
  • qq_23992597
  • qq_23992597
  • 2016年04月15日 15:49
  • 1536

使用QT实现MDI风格的主窗体

转载至:http://blog.csdn.net/henreash/article/details/7618414 QT提供了MDIArea控件可以很方便的实现标准的MDI窗体,但用起来并不方便.感...
  • AUdiQt
  • AUdiQt
  • 2012年07月22日 17:39
  • 754
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中MDI的实现
举报原因:
原因补充:

(最多只允许输入30个字)