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

AsWing中JList使用自定义Item

鲁峰
2023-12-01

    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的使用方法明天会继续研究。

 类似资料: