最近在用 ASwing 做项目,需要根据节点内容自定义 folder 的图标。网上找到一些例子但总有各种各样的问题,于是通过查看 ASwing 的代码,实现了这个简单的功能。在这里跟大家分享,也记录一下比较容易错的几个点。
首先说一下ASwing渲染的结构。
大概的结构就是这样,最后每个节点的渲染是在 TreeCell 中提供图标的。所以实现功能只需要自定义一个自己的 TreeCell 子类。下面是代码:
package {
import org.aswing.Icon;
import org.aswing.tree.DefaultTreeCell;
import org.aswing.tree.MutableTreeNode;
/**
* @author dengyang
*/
public class MyTreeCell extends DefaultTreeCell{
private var squareIcon:Icon;
private var dotIcon:Icon;
public function MyTreeCell(){
super();
if(squareIcon == null) {
squareIcon = new SquareIcon();
}
if(dotIcon == null) {
dotIcon = new DotIcon();
}
}
override public function setCellValue(value:*) : void {
super.setCellValue(value);
//根据此Cell的值,如果最后一个字符数字是偶数,则使用方形图标
//否则使用圆形图标
var node:MutableTreeNode = MutableTreeNode(value);
var str:String = node.getUserObject();
if(str == '德州扑克'){
expanded_folder_icon = dotIcon;
collapsed_folder_icon = dotIcon;
}else{
expanded_folder_icon = squareIcon;
collapsed_folder_icon = squareIcon;
}
}
}
}
import org.aswing.ASColor;
import org.aswing.Component;
import org.aswing.Icon;
import org.aswing.graphics.Graphics2D;
import org.aswing.graphics.SolidBrush;
import flash.display.DisplayObject;
import flash.display.Sprite;
class SquareIcon implements Icon{
[Embed(source="dz.png")]
private var dzpng : Class;
private var dzIcon : DisplayObject;
public function SquareIcon(){
if(dzIcon == null) {
dzIcon = new dzpng();
}
}
public function getIconWidth(c:Component):int{
return 16;
}
public function getIconHeight(c:Component):int{
return 16;
}
public function updateIcon(c:Component, g:Graphics2D, x:int, y:int):void{
g.fillRectangle(new SolidBrush(ASColor.GREEN), x, y, 12, 12);
}
public function getDisplay(c:Component):DisplayObject{
return dzIcon;
}
}
class DotIcon implements Icon{
[Embed(source="dz.png")]
private var dzpng : Class;
[Embed(source="lock.png")]
private var lockPng : Class;
private var dzIcon : Sprite;
public function DotIcon(){
if(dzIcon == null) {
dzIcon = new Sprite();
dzIcon.addChild(new dzpng());
dzIcon.addChild(new lockPng());
}
}
public function getIconWidth(c:Component):int{
return 16;
}
public function getIconHeight(c:Component):int{
return 16;
}
public function updateIcon(c:Component, g:Graphics2D, x:int, y:int):void{
g.fillCircle(new SolidBrush(ASColor.RED), x+6, y+6, 6);
}
public function getDisplay(c:Component):DisplayObject{
return dzIcon;
}
}
代码很简单,但却很容易错。我就错了两次。
起初我在每一个 getDisplay() 中都 new Icon(),造成树上的图标会有残影;后来我在 getDisplay() 中返回 static 的 Icon,同类图表中只有最后一个显示。
后来看了一下 DefaultTreeCell 父类 JLabel 中的 setIcon() ,其中有两个操作,一个是 uninstallIcon ,一个是 installIcon。如果每次都 new 新的对象会造成 uninstallIcon 中无法 remove 上次加载的 icon。而如果是静态变量的话,又会造成每次加入新的 Cell 时会把原有 icon remove 掉。
我知道说起来好像很理所当然,不过在没看代码的前提下还是很容易错的。所以在此记录一下。
- 大小: 28 KB
分享到:
相关推荐
ASWing实现中拖放是一项在图形用户界面(GUI)编程中常见的功能,它允许用户通过鼠标操作将一个对象从一处拖动到另一处,从而实现数据或组件的转移。ASWing是一个开源的Java库,它扩展了Swing框架,提供了更多的功能...
在AsWing中,通过实现`TableCellFactory`可以自定义单元格的渲染逻辑。例如,可以创建一个`GeneralTableCellFactory`来统一管理所有单元格的渲染器。这种方式提高了代码的复用性,同时也方便了单元格样式的统一管理...
- **DragAndDrop功能**:介绍如何在AsWing中实现拖拽功能,以提高用户交互体验。 #### 11. 自定义观感 - **LookAndFeel**:指导如何定制界面的外观和感觉,使其更加符合项目的风格。 #### 12. 可视化工具Gui...
在AsWing中,皮肤(Skin)是界面外观的核心组成部分,它决定了应用程序的图标、颜色方案、布局以及其他UI元素的样式。更换皮肤可以让应用根据用户的偏好或品牌需求呈现出不同的风格。Aeon皮肤以其简洁明快的设计理念...
1. 熟悉ASwing的内部实现,理解组件的工作原理。 2. 自定义组件,满足特定业务需求。 3. 优化性能,例如减少内存占用,提升渲染速度。 4. 更好地集成第三方库或自有的代码。 5. 快速修复发现的问题,无需等待库的...
【AsWing UI源码】是一个面向AS3(ActionScript 3)开发者的UI库,提供了丰富的用户界面组件和工具,旨在简化AS3中的图形用户界面(GUI)开发。这个库不仅包含了完整的源代码,还附带了GUI编辑器,方便开发者设计和...
在这个教程中,我们将深入探讨Aswing皮肤的工作原理,以及如何通过一系列步骤来设计和应用自定义皮肤。 首先,理解Aswing皮肤的基础是关键。Aswing的皮肤主要由两部分组成:外观(LookAndFeel)和组件样式...
- **JPanel**:在AsWing中,`JPanel`扮演着一个非常重要的角色,作为容器组件,它能够容纳其他GUI组件。在设置`JPanel`时,可以通过`setOpaque(boolean opaque)`方法来控制面板是否透明。 ### 2. JWindow与AsWing...
使用ASwing,开发者可以实现以下功能: 1. 创建窗口(Window):模拟Java Swing中的JFrame,为应用程序提供一个容器来展示组件。 2. 组件(Component):提供各种UI组件,如Button、Label、TextArea等,可以自定义...
AS3的aswing帮助文档! AS3的程序员必备物品。。详细的介绍哦
在 ASwing 中,皮肤通常包含颜色、字体、边框和图标的定义,可以是XML或者CSS格式,这使得非程序员也能参与到界面设计中来。 在提供的文件中,`library.swf` 可能是一个包含预定义皮肤元素的Flash库文件。SWF 文件...
aswing API,与AsWing Book.pdf一起使用
在 Flash Builder 4 中运行 ASwing 应用程序,首先需要确保已经安装了 Flash Builder 4,并且在项目中引入了 ASwing 相关的库文件。这通常通过添加外部库或使用 SWC 文件来完成。在 Flash Builder 4 的项目设置中,...
6. **图形和动画**:ASwing允许开发者使用Graphics类进行绘图,创建自定义组件或实现动画效果。了解基本的绘图命令,如drawRect、drawCircle等,以及如何使用Tween类制作平滑的动画。 7. **项目配置与构建**:在`....
1. **选择或创建皮肤**:你可以从ASwing库中选取已有的皮肤,或者根据项目需求自定义新的皮肤。皮肤通常以XML文件的形式存在,其中包含了组件各个部分的定义和样式信息。 2. **导入皮肤到Flash CS5.5**:在Flash中...
在1.3.2这个版本中,我们可以预期开发者已经对ASwing_A3进行了大量的测试和改进,以提供更稳定、高效和易用的开发体验。 这个"allinone"的后缀可能意味着这个压缩包包含了ASwing_A3的全部组件、库、文档和示例,...
1. **组件库**:ASwing提供了丰富的组件集合,如按钮、文本框、面板、表格、菜单等,这些组件设计灵活,易于扩展和自定义。开发者可以根据需求调整组件的外观和行为,实现个性化的设计。 2. **事件处理**:类似于...
AsWing Book.pdfAsWing Book.pdfAsWing Book.pdfAsWing Book.pdf
标题中的“Flash之pureMVC,aswing框架Libs文件”指的是两个主要的ActionScript库:PureMVC和AsWing。这两个库都是为在Adobe Flash环境中开发富互联网应用程序(RIA)而设计的,尤其在Flex框架下使用广泛。下面将详细...