1

我有 2 个JPanelPanel_SPanel_P。第一个监听站事件,第二个监听乘客事件。创建新乘客时,它会添加到JListPanel_P。当乘客完成“去”到车站goToStation并排队时,station.addPassenger(this);车站的事件fireAddPassengerEvent被触发,乘客被添加到JListPanel_S。现在,我需要一些如何从Panel_PJList中移除乘客的方法,因为它完成了“出发”并进入了车站的队列。实现这一点的正确方法是什么?Panel_S是否应该“告诉” Panel_P一旦Panel_S将乘客从其列表中删除将乘客添加到其列表中?

如果您不理解我的问题,请告诉我,我会尽力更好地解释自己。

public class Passenger extends Thread {
    private Station station;
    private Vector<PassengerEventsViewListener> viewListeners;

    public Passenger(Station station)
    {
        this.station = station;
    }
    private void getInLineInStation()
    {
        station.addPassenger(this);
    }
    private void fireArrivedToStationEvent(EventArgs<Passenger> args)
    {       
       for (PassengerEventsViewListener l : viewListeners) {
          l.arrivedToStationEvent(args);
       }
    }
    private void goToStation()
    {
        //going
        fireArrivedToStationEvent(this);
    }

    @Override
    public void run()
    {
       goToStation();
       getInLineInStation();
    }
}

public class Station {
     private Vector<StationEventsViewListener> viewListeners;

     private void fireAddPassengerEvent(Passenger passenger)
     {      
         for (StationEventsViewListener l : viewListeners) {
             l.addPassengerEvent(passenger);
         } 
     }
     public synchronized boolean addPassenger(Passenger p)
     {
          passengersInQueue.addLast(passenger);     
          fireAddPassengerEvent(passenger);
     }
}
4

2 回答 2

2

一旦 Panel_S 将乘客添加到其列表中,Panel_S 是否应该“告诉”Panel_P 从其列表中删除乘客?

在 MVC 中:没有。这通常是 MVC 试图避免的:将视图耦合在一起。像在 MVC 中一样,解决方案是让模型通知此信息。收到通知后,Panel_P 将自动从其列表中删除该乘客。

于 2012-06-09T10:25:04.143 回答
2

不,你的观点不应该交流,也不应该耦合。只有模特们会说话和看到对方。每个模型的视图都会相应改变。

回到你的问题。Panel_P应该链接到包含乘客信息的模型。另一方面,Panel_S应链接到包含有关站点信息的模型。现在当有新乘客到站时,passenger模型应该通知station模型新到站。Panel_S然后可以从station模型更新而不关心passenger模型或其视图(Panel_P

于 2012-06-09T10:39:59.840 回答