1

私は2つ持っていますJPanelPanel_SPanel_P。1つ目はステーションイベントをリッスンし、2つ目はパッセンジャーイベントをリッスンします。新しい乗客が作成されるとJListPanel_Pに追加されます。乗客が駅まで「行き」、駅のイベントgoToStationで列に並ぶと、発砲され、乗客はPanel_Sに追加されます。ここで、Panel_Pが「移動」を終了し、駅のキューに入ったため、乗客をPanel_Pから削除する方法が必要です。これを実装する正しい方法は何ですか?Panel_Sは、 Panel_Sに乗客をリストから削除するように、Panel_Pに「指示」する必要がありますかstation.addPassenger(this);fireAddPassengerEventJListJListそのリストに乗客を追加しますか?

あなたが私の質問を理解していなかったならば、私に教えてください、そして私は自分自身をよりよく説明しようとします。

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から更新できます ( )stationpassengerPanel_P

于 2012-06-09T10:39:59.840 に答える