麻球开发者平台,麻球开发者大赛

只看楼主 楼主

艾睿会员有特权,登陆后广告自动屏障。
现在就花5秒钟免费注册!更有好礼相送!

Adobe AIR迷你教程 -- 创建多窗口以及弹出窗口与父窗口的通讯

今天说一下AIR中的window, 作为桌面应用,免不了会有多窗口存在的可能。所以这也是AIR于Flex web的另一区别。flex web应用的“窗口”都是内部窗口,不管你怎么拖拽它也不会超出flash player的范围。而我们今天说的air中的窗口,是没有范围限制的,任一窗口都可以说是一个“独立”的存在,不受主程序窗口的限制。

Demo主要有以下功能。

1. 简单继承window类创建MyWindow。加入parentWindow属性以及advOpen()方法, 设置MyWindow默认样式。
2. 从主程序中弹出窗口1,从窗口1中弹出窗口2。每个窗口里有image和button
3. 窗口1可以关闭主程序窗口,窗口2可以关闭窗口1。(关闭父窗口)

1. 简单继承window类创建MyWindow。加入parentWindow属性以及advOpen()方法, 设置MyWindow默认样式。

下面是我继承于WIndow的MyWindow,构造方法中设置了默认样式,parentWindow用于在打开窗口时保存父窗口对象。

public class MyWindow extends Window
{
public var parentWindow:Object;

public function MyWindow()
{
  this.systemChrome = "none"; //不显示系统窗口
  this.showStatusBar = false; //不显示底部状态栏
  this.showGripper = false;   //不显示底部大小控制按钮
}

/**
* 自定义open()打开窗口并且保存调用此方法的对象
*/
public function advOpen(parentWindow:Object,openWindowActive:Boolean = true):void{
  this.parentWindow = parentWindow;
  this.open(true)
}

}


2. 从主程序中弹出窗口1,从窗口1中弹出窗口2。每个窗口里有image和button
3. 窗口1可以关闭主程序窗口,窗口2可以关闭窗口1。(关闭父窗口)

下面是窗口1类,继承于MyWindow。在主程序中用了与下面相同的openWin打开窗口1,可以看倒在调用winX.advOpen时传入了当前对象作为被打开窗口的parentWindow. 下面的closeParent()中利用保存的 parentWindow关闭父窗口。

<local:MyWindow  xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="435" height="320" xmlns:local="*">
<mx:Script>
<![CDATA[
import mx.core.Window;

//打开窗口2
private function openWin():void{
  var win2:PicTwo = new PicTwo();
  win2.advOpen(this);
  win2.move(500,50)
}

//关闭父窗口
private function closeParent():void{
  if(this.parentWindow.hasOwnProperty("close")){ //检查父窗口中是否有close方法。
      this.parentWindow.close(); //调用父窗口的close方法
  }
}
]]>
</mx:Script>
<mx:Canvas>
<mx:Image source="@Embed('images/2.png')" />
<mx:Button label="打开我的表情2" click="openWin()"  x="325" y="174"/>
<mx:Button label="关闭父窗口" click="closeParent()" x="342" y="204"/>
</mx:Canvas>
</local:MyWindow>


主程序

<mx:WindowedApplication showStatusBar="false" showGripper="false" xmlns:mx="http://www.adobe.com/2006/mxml" width="430" height="328" layout="absolute">
<mx:Script>
<![CDATA[
import mx.core.Window;
private function openWin():void{
  //新建window对象
  var win:PicOne = new  PicOne();
  win.advOpen(this); //弹出窗口
  win.move(50,50);

}
]]>
</mx:Script>
<mx:Canvas>
<mx:Image source="@Embed('images/1.png')" />
<mx:Button label="打开我的表情1" click="openWin()"  x="325" y="174"/>
</mx:Canvas>

</mx:WindowedApplication>




原文:http://www.flextheworld.com/?p=62
[本帖最后由 koalacui 于 2009-03-24 16:53:45 编辑]

(您是游客)您没有权限查看附件

kevin.luo.sl的签名

评分

举报 使用道具 TOP

只看该用户 沙发!

谢谢前辈 学习中…………

评分

举报 使用道具 TOP

只看该用户 板凳

学习下,请教个问题,您的下面的任务栏是如何实现的?能给点思路吗?谢谢!

评分

举报 使用道具 TOP

只看该用户 地板

LS,那是一些DOCK类的软件,模拟MAC用...

评分

举报 使用道具 TOP

只看该用户 #4

那个......就是MAC
kevin.luo.sl的签名

评分

举报 使用道具 TOP

只看该用户 #5

谢谢LZ  新手学习中

评分

举报 使用道具 TOP

只看该用户 #6

貌似没看到 数据传递?

评分

举报 使用道具 TOP

只看该用户 #7

很好,学习中

评分

举报 使用道具 TOP

只看该用户 #8

没必要这么麻烦
假设一个window组件,MXML文件名为mywindow.mxml,在他的script之间写上
public var obj:Obiect = new Object();

在父窗口WindowedApplication里要弹出mywindow时写:
var obj:Object = new Object();
obj.id = 123;
var popwin:mywindow = new mywindow();
popwin.obj = obj;
popwin.open();

当在mywindow弹出后,想访问父窗体时直接写
Application.application.  //后面就可以访问父窗体的所有public属性和组件

评分

举报 使用道具 TOP

只看该用户 #9

谢谢前辈 学习中…………

评分

举报 使用道具 TOP

只看该用户 #10

谢谢楼主啊

评分

举报 使用道具 TOP

只看该用户 #11

谢谢先行者,领路人!

评分

举报 使用道具 TOP

只看该用户 #12

学习了

评分

举报 使用道具 TOP

只看该用户 #13

谢谢LZ!学习了 @@

评分

举报 使用道具 TOP

只看该用户 #14

学习中。。。。。。。。。。

评分

举报 使用道具 TOP

只看该用户 #15

...没有这么麻烦吧。
effort的签名
程序人生!

评分

举报 使用道具 TOP

只看该用户 #16

谢谢了高手太牛了

顶顶顶顶顶顶顶顶顶顶顶顶顶顶

评分

举报 使用道具 TOP

只看该用户 #17

效果非常绚丽

评分

举报 使用道具 TOP

只看该用户 #18

研究中!
天梯梦的签名
Gideon

评分

举报 使用道具 TOP

只看该用户 #19

新手学习!!!
haoqinghu的签名
大家互相学习!!!

评分

举报 使用道具 TOP

只看该用户 #20

嗯  受教了

评分

举报 使用道具 TOP

只看该用户 #21

thanks , it is very useful.
autumndawn的签名

评分

举报 使用道具 TOP

只看该用户 #22

明白了,非常感谢!
lingxia1du的签名
我是Flex的忠实fans,尽管很多我的朋友多将来我的工作很不看好,但我已经豁出去了,因为我选择,我喜欢。!

评分

举报 使用道具 TOP
艾睿会员有特权,登陆后广告自动屏障。现在就花5秒钟免费注册!更有好礼相送!