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

📄 changemodel.java

📁 一个用java写的地震分析软件(无源码)-used to write a seismic analysis software (without source)
💻 JAVA
字号:
package org.trinet.jiggle;

import java.util.*;
//import java.awt.*;
import javax.swing.event.*;

/** Generic Change model. Allows listeners to be added and removed. */
public class ChangeModel {

     // allows control of whether or not events are fired
     protected boolean fireEvents = true;

     public ChangeModel() {
     }

     /** Allows firing of change events for this model to be turned on and off.*/
     public void setFireEvents(boolean tf) {
       fireEvents = tf;
     }
     /** Returns true if change events will be fired. */
     public boolean getFireEvents() {
       return fireEvents;
     }

// ///////////////////////////////////////////////////////
    // Support of state change events
    EventListenerList listenerList = new EventListenerList();
    ChangeEvent changeEvent = null;

    /** Register listener with list of ChangeListeners.
     *  Does not allow the same listener to be added more than once. */
    public void addChangeListener(EventListener l) {
        if (!contains(l))
	   listenerList.add(ChangeListener.class, l);
    }

    /** Unregister listener from list of ChangeListeners */
    public void removeChangeListener(EventListener l) {
	listenerList.remove(ChangeListener.class, l);
    }

    /** Unregister ALL listeners from list of ChangeListeners */
    public void clearChangeListeners() {
	listenerList = new EventListenerList();
    }

    /** Notify all listeners that have registered interest for notification on
     * this event type.  The event instance is created on each call to reflect the
     * current state. <p> The return from changeEvent.getSource() is this class. */
     protected void fireStateChanged(Object src) {

     // bail if events are turned off
     if (!getFireEvents()) return;

	// bail if no listeners
	if (listenerList.getListenerCount() == 0) return;

	// Guaranteed to return a non-null array, :. no NULL check needed
	Object[] listeners = listenerList.getListenerList();
// Did the below to try to solve random crash problem I though might be caused
// by stateChanged Listeners that added or removed from THIS listener list.
// But it didn't help.
//	Object[] listeners = getEventListenerListCopy();

	ChangeEvent changeEvent = new ChangeEvent(src);

	// Notify the listeners last to first. Note: 'listeners' is an array of
	// PAIRS of ListenerType/Listener, hence the weird indexing.
	for (int i = listeners.length-2; i>=0; i-=2) {
	    if (listeners[i] == ChangeListener.class) {
		((ChangeListener)listeners[i+1]).stateChanged(changeEvent);
	    }
	}
    }
  /** Return true if this Model's listener list contains this listener. */
    public boolean contains (EventListener listener) {
	// bail if no listeners
	if (listenerList.getListenerCount() == 0) return false;

	// Guaranteed to return a non-null array, :. no NULL check needed
	Object[] listeners = listenerList.getListenerList();
	// Search the listeners last to first. Note: 'listeners' is an array of
	// PAIRS of ListenerType/Listener, hence the weird indexing.
	for (int i = listeners.length-2; i>=0; i-=2) {
	    if (listeners[i] == ChangeListener.class &&
	        (ChangeListener)listeners[i+1] == listener) return true;
	}
	return false;
    }
    /** Return count of registered listeners. */
    public int countListeners() {
      return listenerList.getListenerCount();
    }

    /** Returns the internal model. */
    public EventListenerList getEventListenerList () {
       return listenerList;
    }

    public Object[] getEventListenerListCopy () {
	    int i = listenerList.getListenerCount() * 2;
	    Object[] tmp = new Object[i];
	    System.arraycopy(listenerList.getListenerList(), 0, tmp, 0, i);
         return tmp;
    }
    // /////////////////////////////////////////////////////////

}

⌨️ 快捷键说明

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