swingx-master/swingx-plaf/src/main/java/org/jdesktop/swingx/plaf/AbstractUIChangeHandler.java
package org.jdesktop.swingx.plaf;

import java.beans.PropertyChangeListener;
import java.util.Map;
import java.util.WeakHashMap;

import javax.swing.JComponent;

@SuppressWarnings("nls")
public abstract class AbstractUIChangeHandler implements PropertyChangeListener {
	//prevent double installation.
	private final Map<JComponent, Boolean> installed = new WeakHashMap<JComponent, Boolean>();
	
	public void install(JComponent c){
		if(isInstalled(c)){
			return;
		}
		
		c.addPropertyChangeListener("UI", this);
		installed.put(c, Boolean.FALSE);
	}
	
	public boolean isInstalled(JComponent c) {
		return installed.containsKey(c);
	}

    public void uninstall(JComponent c){
		c.removePropertyChangeListener("UI", this);
		installed.remove(c);
	}
}