/*
* @(#)BasicRepaintManager.java
*
* Copyright 2002 EGANTT LLP. All rights reserved.
* PROPRIETARY/QPL. Use is subject to license terms.
*/
package com.egantt.swing.component.repaint.manager;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import com.egantt.swing.component.ComponentContext;
import com.egantt.swing.component.repaint.RepaintManager;
/**
* Handles the repainting of a given set of components, this component set can
* be repainted by invoking the #repaint() call
*/
public abstract class BasicRepaintManager implements RepaintManager {
protected final Set<JComponent> components = new HashSet<JComponent>();
// _________________________________________________________________________
public synchronized void registerComponent(JComponent component, ComponentContext context) {
components.add(component);
}
public synchronized void unregisterComponent(JComponent component) {
components.remove(component);
}
// _________________________________________________________________________
/**
* <code>repaint</code> revalidate's the component and uses it's
* apropriate instantiation of javax.swing.RepaintManager to mark it
* completely dirty.
*/
public void repaint() {
SwingUtilities.invokeLater(new LocalRunnable());
}
protected class LocalRunnable implements Runnable {
public void run() {
for (Iterator iter = components.iterator(); iter.hasNext();) {
JComponent component = (JComponent) iter.next();
// fix up the component size
// component.revalidate();
// repaint the component this is the recomended way to do it
javax.swing.RepaintManager manager = javax.swing.RepaintManager
.currentManager(component);
manager.markCompletelyDirty(component);
}
}
}
}