package org.openflexo.swing;
import java.awt.Component;
import java.awt.Rectangle;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
public abstract class ComponentBoundSaver implements ComponentListener {
private final Component component;
private Thread boundsSaver;
public ComponentBoundSaver(Component component) {
this.component = component;
component.addComponentListener(this);
}
@Override
public void componentResized(ComponentEvent e) {
saveBoundsWhenPossible();
}
@Override
public void componentMoved(ComponentEvent e) {
saveBoundsWhenPossible();
}
@Override
public void componentShown(ComponentEvent e) {
}
@Override
public void componentHidden(ComponentEvent e) {
}
private void saveBoundsWhenPossible() {
if (!component.isVisible()) {
return;
}
if (boundsSaver != null) {
boundsSaver.interrupt();// Resets thread sleep
return;
}
boundsSaver = new Thread(new Runnable() {
/**
* Overrides run
*
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
boolean go = true;
while (go) {
try {
go = false;
Thread.sleep(1000);
} catch (InterruptedException e) {
go = true;// interruption is used to reset sleep.
}
}
saveBounds(component.getBounds());
boundsSaver = null;
}
});
boundsSaver.start();
}
public abstract void saveBounds(Rectangle bounds);
}