天天看点

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方法进行重写:

// 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

继续阅读