From bf609aa35397fc95e10729593865d73c680e2cf9 Mon Sep 17 00:00:00 2001 From: Kevin Ruland Date: Wed, 7 Dec 2011 03:27:39 +0000 Subject: [PATCH] Fixed numerous problems introduced in previous commit which reduced dependency on swing classes ChangeListener and ChangeEvent. --- .../openrocket/gui/adaptors/BooleanModel.java | 8 +++--- .../openrocket/gui/adaptors/DoubleModel.java | 4 +++ .../sf/openrocket/gui/adaptors/EnumModel.java | 9 ++++--- .../openrocket/gui/adaptors/IntegerModel.java | 26 +++++++++++++------ .../gui/components/UnitSelector.java | 9 ++++--- .../gui/configdialog/InnerTubeConfig.java | 8 +++--- .../sf/openrocket/rocketcomponent/Rocket.java | 4 ++- 7 files changed, 43 insertions(+), 25 deletions(-) diff --git a/src/net/sf/openrocket/gui/adaptors/BooleanModel.java b/src/net/sf/openrocket/gui/adaptors/BooleanModel.java index 4e877affe..a2f95ed3c 100644 --- a/src/net/sf/openrocket/gui/adaptors/BooleanModel.java +++ b/src/net/sf/openrocket/gui/adaptors/BooleanModel.java @@ -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 */ -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) { diff --git a/src/net/sf/openrocket/gui/adaptors/DoubleModel.java b/src/net/sf/openrocket/gui/adaptors/DoubleModel.java index 3b5174593..820a54a66 100644 --- a/src/net/sf/openrocket/gui/adaptors/DoubleModel.java +++ b/src/net/sf/openrocket/gui/adaptors/DoubleModel.java @@ -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--; diff --git a/src/net/sf/openrocket/gui/adaptors/EnumModel.java b/src/net/sf/openrocket/gui/adaptors/EnumModel.java index 20c459e78..a6757a380 100644 --- a/src/net/sf/openrocket/gui/adaptors/EnumModel.java +++ b/src/net/sf/openrocket/gui/adaptors/EnumModel.java @@ -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> extends AbstractListModel - implements ComboBoxModel, ChangeListener { + implements ComboBoxModel, StateChangeListener { private final ChangeSource source; private final String valueName; @@ -114,7 +115,7 @@ public class EnumModel> extends AbstractListModel @SuppressWarnings("unchecked") @Override - public void stateChanged(ChangeEvent e) { + public void stateChanged(EventObject e) { Enum value = (Enum) getMethod.invoke(source); if (value != currentValue) { currentValue = value; diff --git a/src/net/sf/openrocket/gui/adaptors/IntegerModel.java b/src/net/sf/openrocket/gui/adaptors/IntegerModel.java index 8cf103652..e948918af 100644 --- a/src/net/sf/openrocket/gui/adaptors/IntegerModel.java +++ b/src/net/sf/openrocket/gui/adaptors/IntegerModel.java @@ -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 listeners = new ArrayList(); + private final ArrayList listeners = new ArrayList(); 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; diff --git a/src/net/sf/openrocket/gui/components/UnitSelector.java b/src/net/sf/openrocket/gui/components/UnitSelector.java index 498d5f8d8..1bdef68e5 100644 --- a/src/net/sf/openrocket/gui/components/UnitSelector.java +++ b/src/net/sf/openrocket/gui/components/UnitSelector.java @@ -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 */ -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(); } diff --git a/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java b/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java index a1c699381..b7c0afeaa 100644 --- a/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java +++ b/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java @@ -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(); } diff --git a/src/net/sf/openrocket/rocketcomponent/Rocket.java b/src/net/sf/openrocket/rocketcomponent/Rocket.java index d9dac38ad..62d2c0804 100644 --- a/src/net/sf/openrocket/rocketcomponent/Rocket.java +++ b/src/net/sf/openrocket/rocketcomponent/Rocket.java @@ -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 ) {