⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 observableset.java

📁 本程序是有IBM开发的一个基于数据表格的组件,里面有相关的例子和DOC,本站资料仅为大家学习之用
💻 JAVA
字号:

package com.ibm.j2x.util.collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

import com.ibm.j2x.event.CollectionEvent;
import com.ibm.j2x.event.CollectionListener;

/**
 * The ObservableSet subclasses the HashSet and 
 * overrides all the functions that change the internally
 * stored collection.  In the overridden function, it simply
 * calls the super class's function and fires a
 * CollectionEvent to let observers know the collection
 * has changed.
 * @author MAbernethy
 *
 */
public class ObservableSet extends HashSet implements ObservableCollection
{
	/** the observers of this collection */
	protected ArrayList listeners = new ArrayList();

	/**
	 * Constructs a new, empty set; the backing HashMap instance has default initial capacity (16) and load factor (0.75).
	 *
	 */
	public ObservableSet() 
	{
		super();
	}

	/**
	 * Constructs a new set containing the elements in the specified collection. The HashMap is created with default load factor (0.75) and an initial capacity sufficient to contain the elements in the specified collection.
	 * @param c the collection whose elements are to be placed into this set.
	 */
	public ObservableSet(Collection c) 
	{
		super(c);
	}

	/**
	 * Constructs a new, empty set; the backing HashMap instance has the specified initial capacity and the specified load factor.
	 * @param initialCapacity the initial capacity of the hash map.
	 * @param loadFactor the load factor of the hash map.
	 */
	public ObservableSet(int initialCapacity, float loadFactor) 
	{
		super(initialCapacity, loadFactor);
	}

	/**
	 * Constructs a new, empty set; the backing HashMap instance has the specified initial capacity and default load factor, which is 0.75.
	 * @param initialCapacity the initial capacity of the hash table.
	 */
	public ObservableSet(int initialCapacity) 
	{
		super(initialCapacity);
	}

	/**
	 * Calls the super class's corresponding method
	 * and fires a CollectionEvent. 
	 */
	public boolean add(Object o)
	{
		boolean b = super.add(o);
		fireCollectionEvent(new CollectionEvent(this, CollectionEvent.ADD));
		return b;
	}

	/**
	 * Calls the super class's corresponding method
	 * and fires a CollectionEvent. 
	 */
	public boolean remove(Object o)
	{
		boolean b = super.remove(o);
		fireCollectionEvent(new CollectionEvent(this, CollectionEvent.REMOVE));
		return b;
	}

	/**
	 * Calls the super class's corresponding method
	 * and fires a CollectionEvent. 
	 */
	public boolean addAll(Collection c)
	{
		boolean b = super.addAll(c);
		fireCollectionEvent(new CollectionEvent(this, CollectionEvent.ADD));
		return b;
	}

	/**
	 * Calls the super class's corresponding method
	 * and fires a CollectionEvent. 
	 */
	public boolean removeAll(Collection c)
	{
		boolean b = super.removeAll(c);
		fireCollectionEvent(new CollectionEvent(this, CollectionEvent.REMOVE));
		return b;
	}

	/**
	 * Calls the super class's corresponding method
	 * and fires a CollectionEvent. 
	 */
	public void clear()
	{
		super.clear();
		fireCollectionEvent(new CollectionEvent(this, CollectionEvent.REMOVE));
	}

	/**
	 * Calls the super class's corresponding method
	 * and fires a CollectionEvent. 
	 */
	public boolean retainAll(Collection c)
	{
		boolean b = super.retainAll(c);
		fireCollectionEvent(new CollectionEvent(this, CollectionEvent.REMOVE));
		return b;
	}
	
	/**
	 * Adds a listener to this collection.
	 * @param l the CollectionListener
	 */
	public void addCollectionListener(CollectionListener l)
	{
		if ( ! listeners.contains(l))
			listeners.add(l);
	}

	/**
	 * Removes the listener from this collection.
	 * @param l the CollectionListener
	 */
	public void removeCollectionListener(CollectionListener l)
	{
		listeners.remove(l);
	}
	
	/**
	 * Fires a CollectionEvent to all listeners.
	 * @param e the CollectionEvent
	 */
	protected void fireCollectionEvent(CollectionEvent e)
	{
		for (Iterator i=listeners.iterator(); i.hasNext();)
			((CollectionListener)i.next()).collectionChanged(e);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -