Итак, для начала у меня есть класс модели под названием rit (ride), который расширяет AbstractModel.У меня также есть AbstractController.
Предполагается, что модель запускает изменение свойства, которое должен обрабатывать абстрактный контроллер.Событие генерируется правильно, но контроллер не перехватывает его.
У меня есть следующий код:
public abstract class AbstractModel {
/**
* Convenience class that allow others to observe changes to the model properties
*/
protected PropertyChangeSupport propertyChangeSupport;
/**
* Default constructor. Instantiates the PropertyChangeSupport class.
*/
public AbstractModel() {
propertyChangeSupport = new PropertyChangeSupport(this);
}
/**
* Adds a property change listener to the observer list.
* @param l The property change listener
*/
public void addPropertyChangeListener(PropertyChangeListener l) {
propertyChangeSupport.addPropertyChangeListener(l);
}
/**
* Fires an event to all registered listeners informing them that a property in
* this model has changed.
* @param propertyName The name of the property
* @param oldValue The previous value of the property before the change
* @param newValue The new property value after the change
*/
protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
PropertyChangeListener[] listener = propertyChangeSupport.getPropertyChangeListeners();
propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
}
}
.
public class RitAanvraagController extends AbstractController {
// Properties this controller expects to be stored in one or more registered models
public static final String RITAANVRAAG_WACHTRIJ_PROPERTY = "Ritaanvraag";
/**
* Voeg een ritaanvraag toe aan het model
* @param ritAanvraag de nieuwe rit aanvraag.
*/
public void nieuwRitaanvraag(RitAanvraagModel ritAanvraag) {
alterModelProperty("add", RITAANVRAAG_WACHTRIJ_PROPERTY, ritAanvraag);
}
}
.
package com.itopia.railcabserver.controller;
public abstract class AbstractController implements PropertyChangeListener {
// Vectors that hold a list of the registered models and views for this controller.
private ArrayList<AbstractViewPanel> registeredViews;
private ArrayList<AbstractModel> registeredModels;
/** Creates a new instance of Controller */
public AbstractController() {
registeredViews = new ArrayList<AbstractViewPanel>();
registeredModels = new ArrayList<AbstractModel>();
}
/**
* Binds a model to this controller. Once added, the controller will listen for all
* model property changes and propogate them on to registered views. In addition,
* it is also responsible for resetting the model properties when a view changes
* state.
* @param model The model to be added
*/
public void addModel(AbstractModel model) {
registeredModels.add(model);
model.addPropertyChangeListener(this);
}
public void propertyChange(PropertyChangeEvent evt) {
for (AbstractViewPanel view : registeredViews) {
view.modelPropertyChange(evt);
}
}
}
Метод propertyChange никогда не находится в abstractcontroller, никогда не запускается.
, но когда я запускаю это: propertyChangeSupport.firePropertyChange (propertyName, oldValue, newValue);в abstractmodel свойство change никогда не запускается в abstractcontroller.ни когда я печатаю что-то на консоли, ни когда я устанавливаю точку остановаКогда я отлаживаю и устанавливаю точку останова в методе propertyChangeSupport.firePropertyChange (propertyName, oldValue, newValue);прослушиватель PropertyChangeListener [] содержит ritAanvraagController.Так что он должен быть запущен, а затем обработан абстрактным контроллером.
Надеюсь, кто-нибудь увидит мою ошибку и сможет мне помочь.
С уважением, Риккерт