Fixed numerous problems introduced in previous commit which reduced dependency on swing classes ChangeListener and ChangeEvent.

This commit is contained in:
Kevin Ruland 2011-12-07 03:27:39 +00:00
parent 713bd6bab8
commit bf609aa353
7 changed files with 43 additions and 25 deletions

View File

@ -6,11 +6,10 @@ import java.beans.PropertyChangeListener;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import net.sf.openrocket.logging.LogHelper;
import net.sf.openrocket.startup.Application;
@ -20,6 +19,7 @@ import net.sf.openrocket.util.Invalidatable;
import net.sf.openrocket.util.Invalidator;
import net.sf.openrocket.util.MemoryManagement;
import net.sf.openrocket.util.Reflection;
import net.sf.openrocket.util.StateChangeListener;
/**
@ -37,7 +37,7 @@ import net.sf.openrocket.util.Reflection;
*
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
*/
public class BooleanModel extends AbstractAction implements ChangeListener, Invalidatable {
public class BooleanModel extends AbstractAction implements StateChangeListener, Invalidatable {
private static final LogHelper log = Application.getLogger();
private final ChangeSource source;
@ -232,7 +232,7 @@ public class BooleanModel extends AbstractAction implements ChangeListener, Inva
}
@Override
public void stateChanged(ChangeEvent event) {
public void stateChanged(EventObject event) {
checkState(true);
if (firing > 0) {

View File

@ -14,6 +14,7 @@ import javax.swing.Action;
import javax.swing.BoundedRangeModel;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import net.sf.openrocket.logging.LogHelper;
@ -891,12 +892,15 @@ public class DoubleModel implements StateChangeListener, ChangeSource, Invalidat
checkState(true);
EventObject event = new EventObject(this);
ChangeEvent cevent = new ChangeEvent(this);
firing++;
// Copy the list before iterating to prevent concurrent modification exceptions.
EventListener[] ls = listeners.toArray(new EventListener[0]);
for (EventListener l : ls) {
if ( l instanceof StateChangeListener ) {
((StateChangeListener)l).stateChanged(event);
} else if ( l instanceof ChangeListener ) {
((ChangeListener)l).stateChanged(cevent);
}
}
firing--;

View File

@ -1,16 +1,17 @@
package net.sf.openrocket.gui.adaptors;
import java.util.EventObject;
import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import net.sf.openrocket.util.ChangeSource;
import net.sf.openrocket.util.Reflection;
import net.sf.openrocket.util.StateChangeListener;
public class EnumModel<T extends Enum<T>> extends AbstractListModel
implements ComboBoxModel, ChangeListener {
implements ComboBoxModel, StateChangeListener {
private final ChangeSource source;
private final String valueName;
@ -114,7 +115,7 @@ public class EnumModel<T extends Enum<T>> extends AbstractListModel
@SuppressWarnings("unchecked")
@Override
public void stateChanged(ChangeEvent e) {
public void stateChanged(EventObject e) {
Enum<T> value = (Enum<T>) getMethod.invoke(source);
if (value != currentValue) {
currentValue = value;

View File

@ -3,6 +3,8 @@ package net.sf.openrocket.gui.adaptors;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.EventListener;
import java.util.EventObject;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
@ -14,9 +16,10 @@ import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.BugException;
import net.sf.openrocket.util.ChangeSource;
import net.sf.openrocket.util.Reflection;
import net.sf.openrocket.util.StateChangeListener;
public class IntegerModel implements ChangeListener {
public class IntegerModel implements StateChangeListener {
private static final LogHelper log = Application.getLogger();
@ -95,7 +98,7 @@ public class IntegerModel implements ChangeListener {
private final Method getMethod;
private final Method setMethod;
private final ArrayList<ChangeListener> listeners = new ArrayList<ChangeListener>();
private final ArrayList<EventListener> listeners = new ArrayList<EventListener>();
private final int minValue;
private final int maxValue;
@ -184,7 +187,7 @@ public class IntegerModel implements ChangeListener {
* is the first listener.
* @param l Listener to add.
*/
public void addChangeListener(ChangeListener l) {
public void addChangeListener(EventListener l) {
if (listeners.isEmpty()) {
source.addChangeListener(this);
lastValue = getValue();
@ -218,11 +221,17 @@ public class IntegerModel implements ChangeListener {
public void fireStateChanged() {
Object[] l = listeners.toArray();
ChangeEvent event = new ChangeEvent(this);
EventListener[] list = listeners.toArray(new EventListener[0] );
EventObject event = new EventObject(this);
ChangeEvent cevent = new ChangeEvent(this);
firing++;
for (int i = 0; i < l.length; i++)
((ChangeListener) l[i]).stateChanged(event);
for( EventListener l : list ) {
if ( l instanceof ChangeListener) {
((ChangeListener)l).stateChanged(cevent);
} else if ( l instanceof StateChangeListener ) {
((StateChangeListener)l).stateChanged(event);
}
}
firing--;
}
@ -230,7 +239,8 @@ public class IntegerModel implements ChangeListener {
* Called when the source changes. Checks whether the modeled value has changed, and if
* it has, updates lastValue and generates ChangeEvents for all listeners of the model.
*/
public void stateChanged(ChangeEvent e) {
@Override
public void stateChanged(EventObject e) {
int v = getValue();
if (lastValue == v)
return;

View File

@ -11,6 +11,7 @@ import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
import javax.swing.Action;
@ -20,12 +21,11 @@ import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import net.sf.openrocket.gui.adaptors.DoubleModel;
import net.sf.openrocket.unit.Unit;
import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.StateChangeListener;
/**
@ -36,7 +36,7 @@ import net.sf.openrocket.unit.UnitGroup;
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
*/
public class UnitSelector extends StyledLabel implements ChangeListener, MouseListener,
public class UnitSelector extends StyledLabel implements StateChangeListener, MouseListener,
ItemSelectable {
private DoubleModel model;
@ -235,7 +235,8 @@ public class UnitSelector extends StyledLabel implements ChangeListener, MouseLi
/**
* Update the component when the DoubleModel changes.
*/
public void stateChanged(ChangeEvent e) {
@Override
public void stateChanged(EventObject e) {
updateText();
}

View File

@ -13,6 +13,7 @@ import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Ellipse2D;
import java.util.EventObject;
import java.util.List;
import javax.swing.BorderFactory;
@ -23,8 +24,6 @@ import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SwingUtilities;
import javax.swing.border.BevelBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.document.OpenRocketDocument;
@ -43,6 +42,7 @@ import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.BugException;
import net.sf.openrocket.util.Coordinate;
import net.sf.openrocket.util.StateChangeListener;
public class InnerTubeConfig extends ThicknessRingComponentConfig {
@ -228,7 +228,7 @@ class ClusterSelectionPanel extends JPanel {
}
private class ClusterButton extends JPanel implements ChangeListener, MouseListener,
private class ClusterButton extends JPanel implements StateChangeListener, MouseListener,
Resettable {
private Clusterable component;
private ClusterConfiguration config;
@ -285,7 +285,7 @@ class ClusterSelectionPanel extends JPanel {
@Override
public void stateChanged(ChangeEvent e) {
public void stateChanged(EventObject e) {
repaint();
}

View File

@ -420,7 +420,9 @@ public class Rocket extends RocketComponent {
}
// Notify all listeners
for ( EventListener l : listenerList ) {
// Copy the list before iterating to prevent concurrent modification exceptions.
EventListener[] list = listenerList.toArray( new EventListener[0] );
for ( EventListener l : list ) {
if ( l instanceof ComponentChangeListener ) {
((ComponentChangeListener) l ).componentChanged(e);
} else if ( l instanceof StateChangeListener ) {