关于gui的skinnableContainer的一点问题

创建一个UIAsset

 var uiAsset = new egret.gui.UIAsset();
 uiAsset.source = "bgImage";

把UIAsset添加到SkinnableContainer上

 var container = new egret.gui.SkinnableContainer();
 container.addElement(uiAsset);

然后把container添加到stage上会发现uiAsset并没有显示出来。这是什么原因呢?

这时我去看了一下SkinnableContainer的代码,发现

public addElement(element:IVisualElement):IVisualElement {
      return this._getCurrentContentGroup().addElement(element);
}

public _getCurrentContentGroup():Group {
      if (this.contentGroup == null) {
           if (this._placeHolderGroup == null) {
                this._placeHolderGroup = new Group();
                this._placeHolderGroup.visible = false;
                this._addToDisplayList(<DisplayObject><any>this._placeHolderGroup);
           }
                this._placeHolderGroup.addEventListener(
                    ElementExistenceEvent.ELEMENT_ADD, this._contentGroup_elementAddedHandler, this);
                this._placeHolderGroup.addEventListener(
                    ElementExistenceEvent.ELEMENT_REMOVE, this._contentGroup_elementRemovedHandler, this);
                return this._placeHolderGroup;
      }
      else {
           return this.contentGroup;      
      }
}

SkinnableContainer的addElement是默认如果没有contentGroup的话是加在_placeHolderGroup上的,而placeHolderGroup默认的visible是false的,而在partAdded中如果发现有皮肤里有contentGroup,则会把placeHolderGroup的children放到contentGroup里。

皮肤里若没有contentGroup,则skinnableContainer所有的addElement的子项都不会显示

我们给container赋一个皮肤。

 var container = new egret.gui.SkinnableContainer();
 container.skinName = testSkin;
 container.addElement(uiAsset);

//皮肤类
class testSkin extends egret.gui.Skin {

    private contentGroup:egret.gui.Group;
    public get skinParts() {
        return ["contentGroup"]
    }

    constructor() {
        super();
    }

    public createChildren():void {
        super.createChildren();

        var group = new egret.gui.Group();
        this.contentGroup = group;
        this.addElement(group);
    }
}

testSkin当中有一个contentGroup,这样uiAsset才会显示出来。

时间: 2024-11-04 23:33:56

关于gui的skinnableContainer的一点问题的相关文章

QT 异步函数转为同步函数的方法

在QT中,一般推荐使用异步函数.除了异步函数的非阻塞特性外,QT的Signal/Slot特性在异步函数中可以得到充分的发挥.因此,在QT中,很多API的设计都是使用非阻塞的异步函数作为API,然后执行结果使用Signal返回.用户执行API后使用slot函数接收反馈结果. 但是在很多场景下,我们的确可能需要同步函数.也就是说函数在返回执行结果之前必须阻塞,调用函数后必须得到相应的执行结果.这时候,对于大量使用signal/slot的QT程序来说,经常需要将一个异步函数转变为同步函数.具体的转换做

[转载] 关于matlab GUI的一点心得

转载自 落落轻尘 [Fig文件方式,即使用菜单File->New->GUI来设计界面] 首先值得注意的是,在低版本matlab上制作的含GUI的m文件一般不能在高版本的matlab上面运行,但是从7.0版开始改进了一点,我试过 6.5版的含GUI的m文件可以在 7.0版上运行,但如果在7.0版上面修改过.fig文件,那么就不能回到6.5版上运行了(显示一堆错误,我没看懂,不知道能否通过修改使之重新可在 6.5版上运行,呵呵),而在7.0版上制作的含GUI的m文件就完全不能放到6.5版上运行了(

在java的GUI中暂停、继续其他线程的方法

在java GUI中,如果想通过某个按钮或其他用户可交互控控制件主线程之外的线程的暂停和继续,怎么办呢?这是我想到的一个办法. 这里提供一个java API文档链接:http://docs.oracle.com/javase/8/docs/api/index.html.参考里面的java.lang包中的Thread类,此类的suspend不推荐,用着方法是不安全的.其实每个对象都有一个wait()反法,我们就用这个方法. 自己建立一个类继承Thread类,里面定义两个变量: 1 public O

第14篇-JAVA GUI编程

第14篇-JAVA GUI编程 每篇一句 :道路一开始开辟的时候总是存在障碍的 初学心得: 原本下定决心才能开始的事情也变得理所当然 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-25| JAVA GUI编程 ] 1.什么是界面 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面 与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受 2.Java 基础类 JFC 的基本

SAP GUI个性化设置

大概从GUI730开始,GUI品牌化一直不被默认支持,在GUI设置选项里处于灰色状态,如下图: 不过用户还是可以修改注册表的方式来进行修改,让它可以设置! 首先运行Regedit,在目录:HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\SAP\General\Appearance 下,右边添加以下REG_DWORD属性: UseBrandingImage_ReadOnly  : 代表是否品牌化,也就是复选框是否只读,1代表只读0代表可以编辑: BrandingIm

开发一个Swing功能时的一点总结

对JTextField进行效验,有两个途径:(1)是使用javax.swing.InputVerifier在获取焦点时进行校验(2)在点击“确定”按钮的监听事件中对控件的值进行校验 鉴于涉及的业务比较多,代码结构已经确定,如果在“确定”按钮的监听事件中进行效验,需要增加一个步骤,并且并不是所有的业务都需要这个效验,就倾向于使用javax.swing.InputVerifier进行,这样做有两个好处,(1)分离业务逻辑与前端 (2)代码更优雅 javax.swing.InputVerifier用的

3.文档视图:从gui分割状态

为了解决一个类实现所有功能的缺陷,我们把application分为2个部分.一个部分业务逻辑,一个部分视觉渲染和交互.这2个类在学术上被称为document view 或者 model delegate.  Document类用来处理业务逻辑,和视觉渲染.GUI事件没有一点关系.它简单的存储应用程序的状态,提供接口获得状态并根据应用程序规则改变状态.另外,提供机制告知相关对象,应用程序状态改变. View类处理事件和图像渲染.提供对 Document类的操作,界面改变和 Document类中状态

GUI创建各常用控件(二)

继续接着上一篇! 在我看来有一点需要申明:由于是GUI的相关知识,所以我只是在复习中粗略的总结而已,因此参考价值可能有限,更多的是当作自己学习的一个记录以及便于自己查阅. 好啦!干货继续: 1.类似于GUI.Box(new Rect(Screen.width/2,Screen.height/2,Screen.width/2,Screen.height/2),   new GUIContent("This is a title","hahaha"));的命令:   其

Python GUI漫谈

Windows下面做C++那会用惯了MFC,对框架产生了依赖,使用框架虽然占用了很多不必要的系统资源,也拖慢了程序的运行效率,但是做个demo什么的往框框里填点代码就可以的确很方便.而且对我来说,这样比纯手写更规整,哪个部分应该填什么不应该填什么系统会帮你甄别,避免了纯手打的随意性.今天上网随便搜搜Python的帖子,想起了以前扫过一眼的PyQt.其实我对框架最基本的要求就是当我需要做UI的时候一定要简单实用,当然,最好是有很强的扩展性,这样以后真需要玩的时候也有得玩.可能个人水平问题,用过py