声明:本文章中介绍的内容可以在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