MDI子窗口间的数据共享

简介:
声明:本文章中介绍的内容可以在GPF项目中找到相应的实现。
 
MDI的子窗口间的数据共享是在设计MDI程序是应当注意的问题。作为MDI程序的GPF,在设计时也需要考虑这一点。
 
GPF中,对于一些绘图工具的设置,可以设置成全局性的。也就是说,当窗口1点击“绘制直线”按钮时,窗口2当前的操作同样更改为“绘制直线”。这时,就有两种方法实现,一个是“送出去”,一个是“取过来”。
 
所谓“送出去”,是指的由主程序将更改的数据送发给各个子窗口。比如如下的代码:
 
//... 
currentColor = newColor; 
//... 
JInternalFrame[] frames = jDesktopPane.getAllFrames(); 
for(JInternalFrame iframe : frames){ 
    iframe.setColor(currentColor); 

//...
 
这段代码很清楚,当属性currentColor改变时,首先获取当前JDesktopPane中所有的JInternalFrame,然后利用循环依次设置。这个可以称作“送出去”,是有主程序发送给内部子窗口各个数据的。
 
另外一个是“取过来”,意思是由子窗口去获取最新数据。当子窗口被选择时,它才需要获取最新数据,从而执行相应的操作。因此,根据这一思路,我们将子窗口的isSelected方法进行重写:
 
//... 
currentColor = newColor; 
//... 
// in child class of JInternalFrame 
class InnerFrame  extends JInternalFrame { 
     //... 
    Color innerColor; 
    @Override 
     public  boolean isSelected(){ 
         if(isSelected) { 
            innerColor = currentColor; 
        } 
         return isSelected; 
    } 
     //... 
}
 
这里,我们重写了JInternalFrame的isSelected方法,根据继承来的isSelected属性进行设置,当isSelected为true时,更新自身的属性,这就实现了主动“取过来”获得数据的方法。
 
当然,这并不一定是最好的方法,但是个人觉得还是简单可行的。在早版本的GPF中使用的是第一种“送出去”的方法,结果存在大量的循环代码,而在新版本中,则使用了“取过来”方法,比起前一版本更加简单可行。

本文转自 FinderCheng 51CTO博客,原文链接:
http://blog.51cto.com/devbean/92925
相关文章
|
10月前
|
API 数据库
数据库—机房收费系统之MDI窗体与子窗体
这可怎么办?于是果断百度,百度解说,MDI窗体上是不允许放控件的,but,可以在MDI窗体上放一个picturebox控件然后就能够放控件了,于是就这样去做了。
|
10月前
|
API
vb如何设置父窗体与子窗体——MDI窗体
vb如何设置父窗体与子窗体——MDI窗体
C#编程学习19:mdi窗体中子窗体不能重复打开的三种实现方式
C#编程学习19:mdi窗体中子窗体不能重复打开的三种实现方式
C#编程学习19:mdi窗体中子窗体不能重复打开的三种实现方式
c#窗体——显示子窗口父窗口
c#窗体——显示子窗口父窗口
251 0
Qt父窗口与子窗口数据交互(用拾色器举例)
Qt父窗口与子窗口数据交互(用拾色器举例)
Qt父窗口与子窗口数据交互(用拾色器举例)
父窗口与子窗口的层次关系
原文:父窗口与子窗口的层次关系                      父窗口与子窗口的层次关系                           周银辉 关于子窗体的层级关系总结一下哈,希望能对大家有些帮助 假设有这样两个窗体:RootWindow,SubWindow,在RootW...
891 0