当前位置: 首页 > 工具软件 > AsWing > 使用案例 >

ASWing 学习(2)

仲孙鸿畴
2023-12-01

来源:http://wiki.9ria.com/Aswing 


常用的边框:AsWing 自带有7 个常用的边框类,分别是:



29. 图标(Icon):在AsWing中,所有AbstractButton 都能设置图标,包括按钮,单选复选框,菜单等等,并且不同的状态还可以设置不同的图标。图标接口共有4 个方法,要实现自己的图标类并不难,不过通常使用LoadIcon 或AttachIcon 或者直接使用AssetIcon 已能达到大部分的需要(与美术设计师创造的图形资源配合)。与Border 不同的是,LookAndFeel 通常不会给组件设置图标来修饰组件(JFrame 的默认图标除外)。

30. AssetIcon:元件图标,通过一个元件实例创建的图标,图标元素就是传入的元件本身。 构造函数形式为AssetIcon(asset:DisplayObject=null, width:int=-1, height:int=-1,scale:Boolean=false),第一个参数为图标的元件,它可以是任何DisplayObject 对象,位图Bitmap 或者动画MovieClip 等都可以,width 和height 指定图标的宽高,如果用默认值-1,那么它会采用元件的width 和height 属性,最后一个参数scale,是指当指定的宽高和元件本身宽高不等时,是否需要缩放元件到指定的宽高值。

31. Attach Icon:图标(Icon):在AsWing中,所有AbstractButton 都能设置图标,包括按钮,单选复选框,菜单等等,并且不同的状态还可以设置不同的图标。图标接口共有4 个方法,要实现自己的图标类并不难,不过通常使用LoadIcon 或AttachIcon 或者直接使用AssetIcon 已能达到大部分的需要(与美术设计师创造的图形资源配合)。与Border 不同的是,LookAndFeel 通常不会给组件设置图标来修饰组件(JFrame 的默认图标除外)。

32. AssetIcon:元件图标,通过一个元件实例创建的图标,图标元素就是传入的元件本身。 构造函数形式为AssetIcon(asset:DisplayObject=null, width:int=-1, height:int=-1,scale:Boolean=false),第一个参数为图标的元件,它可以是任何DisplayObject 对象,位图Bitmap 或者动画MovieClip 等都可以,width 和height 指定图标的宽高,如果用默认值-1,那么它会采用元件的width 和height 属性,最后一个参数scale,是指当指定的宽高和元件本身宽高不等时,是否需要缩放元件到指定的宽高值。

33. AttachIcon:绑定元件图标,它是AssetIcon的子类,通过指定元件类名和程序域创建 元件实例,并用此实例作为图标元素。

34. LoadIcon:加载资源图标,也是AssetIcon的子类,通过加载指定路径下的一个元件资 源来作为图标元素。

35. LoadIcon:加载资源图标,也是AssetIcon的子类,通过加载指定路径下的一个元件资 源来作为图标元素。

36. GroundDecorator:前景/背景装饰器,由于所有组件都可以拥有一个前景装饰器,一个背景装饰器,因此在装饰一个组件时,它是最好的选择,比如你要让一个窗口的底层显示一个动画,那么用yourWindow.setBackgroundDecorator(new AssetBackground(yourMovie));即可达到。

37. AsWing 组件可以随意的添加任何显示元件,这和Flex 界面框架不同,Flex 界面框 架要求被添加的显示元件必须实现IUIComponent 接口,给开发人员与美术设计人员之间的配合带来了诸多不便。 直接添加显示元件:虽然AsWing 组件没有限制往内添加任何显示元件,但是也有需要 注意的地方。比如上例中关于遮罩的问题,和JFrame 一样,所有组件默认都是被遮罩的,如果你的图形内容需要超出组件范围,那么就需要取消遮罩,但是要谨慎使用,取消遮罩也就意味着这个组件的图形可能会超出自己的范围从而与其他组件相叠。并且,对于JFrame,取消掉遮罩还意味着最小化的时候组件的contentPane 会暴露出来,因为遮罩失效了,最小化时contentPane 不会被遮起。通常的解决方法是,要么对这样的JFrame 取消最小化功能,要么监听最小化事件,在最小化之后把contentPane 设置为不可见(setVisible(false))。另外,如果你添加的元件是一个InteractiveObject,典型的比如一个绑定的MovieClip,它会吃鼠标事件,为了不让其吃掉组件本应该吃的鼠标事件, 你应该把它的mouseEnable 和mouseChildren 属性设置为false,除非你故意需要它来吃事件。

38. 自定义光标:光标管理器的方法都非常简单,本节就不再举例了,读者可以自己尝试编 写例子来实验。这里讲讲自定义光标的内部实现细节,AsWing 自定义光标是通过在光标根容器中添加光标元件,并且监听鼠标移动事件来同步元件与鼠标的位置来实现的。光标根容器默认为Stage,你也可以通过setCursorContainerRoot 方法来设置到别的容器内,但注意鼠标根容器应该是处于一个比较根部的位置,以使得鼠标图形元件被添加时,能够始终显示在最上层。

39. 包装SimpleButton:AbstractButton 及其子类都拥有此能力,此能力极好的方便了开发人员直接使用美术设计师创建的按钮元件。它的实现原理,其实是把SimpleButton 按钮元件作为AbstractButton 的Icon,然后根据AbstractButton 的状态变化,设置SimpleButton的状态,实现代码并不复杂,读者可以参阅SimpleButtonIconToggle 类的源代码,观察它的内部实现细节。JButton 覆盖了wrapSimpleButton 并采用了略微不同的实现方式,目的是使鼠标点击范围完全转移到SimpleButton 上,使得包装后的JButton 与原始SimpleButton 的行为更一致。读者如果通过阅读相关代码,理解了包装SimpleButton 的实现原理,那么你也就学会了更深入的修饰AsWing 组件的方法了。

40. JList 是一个实现了Viewportable 的组件,用来显示一个从上到下排列的数据列 }}表,条目单元的显示由ListCell 定义,ListCell 的实例由ListCellFactory 产生, 数据模型由ListModel 提供。JList 拥有的事件比JTable 略多,除了条目选择变化事 件外,还拥有一些列与条目自身相关的事件,比如条目被点击,条目在鼠标移出范围时等,注意,如果要监听条目双击事件,需要给单元格组件(getCellComponent 方法返回的组件)设置doubleClickEnabled=true,否则不会生效。详细的事件定义请参阅相关api文档。

41. VectorListModel是AsWing自带的ListModel 实现,它的行为类似一个Vector, 可以随意在任何位置插入/删除数据,并且在数据改变时,会自动触发对应的事件,使得JList 自动更新界面显示。读者可以尝试给上面的例子程序加入删除/添加条目的功能,观察JList 是否会自动的更新。

42. ListCell定义了JList 的单元格渲染,和TableCell 原理类似,AsWing 自带的 实现有DefaultListCell,它表现为把数据以字符串的方式显示(数据的toString() 方法的返回值将作为显示字符串)。

43. ListCellFactory 是创建ListCell 的工厂,与TableCellFactory 类似,但它 还负责更多的事情,除了创建ListCell 的方法外,它还有:

 类似资料: