AsWing本身是一款ActionScript的开源UI组件,是按照Java Swing的架构写的。
本次使用的是AsWing的AS3版中的JList,简单的list使用在Test中已经有例子。今天尝试的是在list中加入更复杂的组件如JLabelBottun。
首先和Java Swing一样,AsWing遵循MVC模式。其中和list有关的主要是ListModel类,ListSelectModel类,ListCell接口,ListCellFactory接口,其中ListCell接口完成Java Swing中Cell Render的功能。而ListCellFactory接口用于生成ListCell接口。默认情况下JList只能把数据按照Text的方式显示(具体实现可见DefualtListCell类)。为了实现更丰富的功能,我们必须自己写一个类,和DefualListCell一样继承于AbstractListCell。
于是我参照DefualtListCell写了一个UserListCell
package com.List{
import org.aswing.AbstractListCell;
import org.aswing.Component;
import org.aswing.JLabelButton;
import org.aswing.event.ResizedEvent;
public class UserListCell extends AbstractListCell {
private var User:JLabelButton;
public function UserListCell():void{
super();
}
override public function setCellValue(value:*):void{
super.setCellValue(value);
User.setText(value.toString());
}
override public function getCellComponent():Component{
return getLabelButton();
}
protected function getLabelButton():JLabelButton{
if(User==null){
User=new JLabelButton();
InitItem(User);
}
return User;
}
protected function InitItem(Item:JLabelButton):void{
Item.setOpaque(true);
Item.setFocusable(true);
Item.addEventListener(ResizedEvent.RESIZED,__resized)
}
private function __resized(e:ResizedEvent):void{
}
}
}
然后,使用这个新的UserListCell生成一个ListCellFactory,具体的代码是:
listcellfactory:GeneralListCellFactory=new GeneralListCellFactory(UserListCell,true,true);
最后,在生成JList的时候使用setCellFactory来替换默认的ListCellFactory:
list.setCellFactory(listcellfactory);
这样生成的list就可以显示JLabelBottun了。至于ListModel的使用方法明天会继续研究。