java中MDI的实现
来源:互联网 发布:淘宝买家给差评怎么办 编辑:程序博客网 时间:2024/06/05 20:12
MDI,Multiple Document Interface(多文档界面)与SDI相对,应用也很广泛。像Word XP以前的版本都是用MDI(之后的版本应该也算MDI,但形式有些不同,看起来像SDI),VS/VS.Net等很多软件也都是MDI,其方便显而易见,即可以在一个窗体中的有限空间里提供多个文档同时编辑使用的功能。
一般的编程语言都会提供显著的MDI功能,但Java似乎不那么明显,问了一些经常使用Java的同学居然一时也没说上来如何实现。于是借助网络的强大力量,我们知道了在Swing中提供了JDesktopPane和JInternalFrame,结合使用即可实现MDI的效果。
代码是简单的,先在主窗体(可是以一个JFrame)中加入一个JDesktopPane,为MDI“提供活动的空间”:
这里的??可以是任意的Container,这一点Java就显得很自由,很灵活,可以在很多地方创建这样的一个DesktopPane。
当然,如果想这个Pane在需要时可以滚动,可以使用常用的技巧,把它加入一个JScrollPane,这里比较特殊,需要重载它的preferredSizeOfAllFrames函数才能获得正确的尺寸,才有正确的滚动效果:(这是一位网友陈先波的代码)
然后可以往里加入子窗口JInternalFrame了:
一般的编程语言都会提供显著的MDI功能,但Java似乎不那么明显,问了一些经常使用Java的同学居然一时也没说上来如何实现。于是借助网络的强大力量,我们知道了在Swing中提供了JDesktopPane和JInternalFrame,结合使用即可实现MDI的效果。
代码是简单的,先在主窗体(可是以一个JFrame)中加入一个JDesktopPane,为MDI“提供活动的空间”:
JDesktopPane desktop = new JDesktopPane ();
??.add(desktop);
??.add(desktop);
当然,如果想这个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);
}
}
{
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){}
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
- java中MDI的实现
- Java中MDI的实现
- [JAVA学习]JInternalFrame实现MDI
- MDI窗口中实现自动缩放的背景图
- C#中MDI子窗体的Singleton模式实现
- MDI Winform中窗口屏幕、级联等排列的实现
- VC的MDI中实现动态切换文档视图
- JAVA实现可设置背景的MDI窗口
- mdi多层子窗体的实现
- [WPF]WPF实现MDI窗体的方法
- WPF实现MDI窗体的方法
- WPF MDI窗体的实现方法
- 使用WPF实现MDI窗体的方法
- MDI中MainFrame与ChildFrame的关系
- MFC应用程序中指针的使用 MDI
- 更改MDI中Frame的背景
- MDI中对象的销毁过程
- 在MDI/SDI 中实现 RictEdit 复制粘贴功能
- 茫然……
- 为Java程序中添加播放MIDI音乐功能
- 网页中动态显示时间
- java更换皮肤
- 分页打印
- java中MDI的实现
- 如何把多个文件写入到一个文件中去并能分解
- 身份证校验算法与ASP程序
- Oracle 由非归档模式改成归档模式
- 被称为世上最经典的25句话(不顶勿入)
- Win32_NetworkAdapterConfiguration
- asp.net2.0数据访问(1)-入门-创建数据访问层
- start
- 近期SEO学习的收获