DefaultListModel.java
上传用户:haobig99
上传日期:2022-06-15
资源大小:369k
文件大小:5k
源码类别:

J2ME

开发平台:

Java

  1. /*
  2.  * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
  3.  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4.  *
  5.  * This code is free software; you can redistribute it and/or modify it
  6.  * under the terms of the GNU General Public License version 2 only, as
  7.  * published by the Free Software Foundation.  Sun designates this
  8.  * particular file as subject to the "Classpath" exception as provided
  9.  * by Sun in the LICENSE file that accompanied this code.
  10.  *
  11.  * This code is distributed in the hope that it will be useful, but WITHOUT
  12.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13.  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14.  * version 2 for more details (a copy is included in the LICENSE file that
  15.  * accompanied this code).
  16.  *
  17.  * You should have received a copy of the GNU General Public License version
  18.  * 2 along with this work; if not, write to the Free Software Foundation,
  19.  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20.  *
  21.  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  22.  * CA 95054 USA or visit www.sun.com if you need additional information or
  23.  * have any questions.
  24.  */
  25. package com.sun.lwuit.list;
  26. import com.sun.lwuit.events.DataChangedListener;
  27. import com.sun.lwuit.events.SelectionListener;
  28. import com.sun.lwuit.util.EventDispatcher;
  29. import java.util.Vector;
  30. /**
  31.  * Default implementation of the list model based on a vector of elements
  32.  *
  33.  * @author Chen Fishbein
  34.  */
  35. public class DefaultListModel implements ListModel{
  36.     
  37.     private Vector items;
  38.     private EventDispatcher dataListener = new EventDispatcher();
  39.     private EventDispatcher selectionListener = new EventDispatcher();
  40.         
  41.     private int selectedIndex = 0;
  42.     
  43.     /** 
  44.      * Creates a new instance of DefaultListModel 
  45.      */
  46.     public DefaultListModel() {
  47.         this.items = new Vector();
  48.     }
  49.     /** 
  50.      * Creates a new instance of DefaultListModel 
  51.      * 
  52.      * @param items the items in the model
  53.      */
  54.     public DefaultListModel(Vector items) {
  55.         this.items = items;
  56.     }
  57.     /** 
  58.      * Creates a new instance of DefaultListModel 
  59.      * 
  60.      * @param items the items in the model
  61.      */
  62.     public DefaultListModel(Object[] items) {
  63.         this.items = createVector(items);
  64.     }
  65.     private static Vector createVector(Object[] items) {
  66.         if (items == null) {
  67.             items = new Object[] {""};
  68.         }
  69.         Vector vec = new Vector(items.length);
  70.         for(int iter = 0 ; iter < items.length ; iter++) {
  71.             vec.addElement(items[iter]);
  72.         }
  73.         return vec;
  74.     }
  75.     /**
  76.      * @inheritDoc
  77.      */
  78.     public Object getItemAt(int index) {
  79.         if(index < getSize() && index >= 0){
  80.             return items.elementAt(index);
  81.         }
  82.         return null;
  83.     }
  84.     /**
  85.      * @inheritDoc
  86.      */
  87.     public int getSize() {
  88.         return items.size();
  89.     }
  90.     /**
  91.      * @inheritDoc
  92.      */
  93.     public int getSelectedIndex() {
  94.         return selectedIndex;
  95.     }
  96.     
  97.     /**
  98.      * @inheritDoc
  99.      */
  100.     public void addItem(Object item){
  101.         items.addElement(item);
  102.         fireDataChangedEvent(DataChangedListener.ADDED, items.size());
  103.     }
  104.     
  105.     /**
  106.      * Change the item at the given index
  107.      * 
  108.      * @param index the offset for the item
  109.      * @param item the value to set
  110.      */
  111.     public void setItem(int index, Object item){
  112.         items.setElementAt(item, index);
  113.         fireDataChangedEvent(DataChangedListener.CHANGED, index);
  114.     }
  115.     /**
  116.      * Adding an item to list at given index
  117.      * @param item - the item to add
  118.      * @param index - the index position in the list
  119.      */
  120.     public void addItemAtIndex(Object item, int index){
  121.         if (index <= items.size()) {
  122.             items.insertElementAt(item, index);
  123.             fireDataChangedEvent(DataChangedListener.ADDED, index);
  124.         }
  125.     }
  126.     
  127.     /**
  128.      * @inheritDoc
  129.      */
  130.     public void removeItem(int index){
  131.         if(index < getSize() && index >= 0){
  132.             items.removeElementAt(index);
  133.             if(index != 0){
  134.                 setSelectedIndex(index - 1);
  135.             }
  136.             fireDataChangedEvent(DataChangedListener.REMOVED, index);
  137.         }
  138.     }
  139.     
  140.     /**
  141.      * Removes all elements from the model
  142.      */
  143.     public void removeAll(){
  144.         while(getSize() > 0) {
  145.             removeItem(0);
  146.         }
  147.     }
  148.     
  149.     /**
  150.      * @inheritDoc
  151.      */
  152.     public void setSelectedIndex(int index) {
  153.         int oldIndex = selectedIndex;
  154.         this.selectedIndex = index;
  155.         selectionListener.fireSelectionEvent(oldIndex, selectedIndex);
  156.     }
  157.     /**
  158.      * @inheritDoc
  159.      */
  160.     public void addDataChangedListener(DataChangedListener l) {
  161.         dataListener.addListener(l);
  162.     }
  163.     /**
  164.      * @inheritDoc
  165.      */
  166.     public void removeDataChangedListener(DataChangedListener l) {
  167.         dataListener.removeListener(l);
  168.     }
  169.     
  170.     private void fireDataChangedEvent(final int status, final int index){
  171.         dataListener.fireDataChangeEvent(index, status);
  172.     }
  173.     /**
  174.      * @inheritDoc
  175.      */
  176.     public void addSelectionListener(SelectionListener l) {
  177.         selectionListener.addListener(l);
  178.     }
  179.     /**
  180.      * @inheritDoc
  181.      */
  182.     public void removeSelectionListener(SelectionListener l) {
  183.         selectionListener.removeListener(l);
  184.     }
  185. }