本次作業(yè)中,需要?jiǎng)?chuàng)建多個(gè) Agency 來(lái)申請(qǐng)航空公司的航班。在創(chuàng)建的TravelAgency這個(gè)類當(dāng)中,由于每個(gè)Agency可以選擇自己需要的航空公司的航班,所以我們需要給TravelAgency中添加 AirlinerDir,AirlinerDir是用來(lái)保存Airliner對(duì)象的ArrayList。并且需要注意,在每一次new一個(gè)?TravelAgency 以后,都需要?jiǎng)?chuàng)建一個(gè)這個(gè)Agency對(duì)應(yīng)的AirlinerDir。所以使用再Constructor里新建的方式來(lái)避免NullPointerException. 代碼如下。
public class TravelAgency {
? ? private String agencyName;
? ? private AirlinerDir airlinerDir;
? ? public TravelAgency() {
? ? ? ? this.airlinerDir = new AirlinerDir();
? ? }
最剛開(kāi)始犯了一個(gè)錯(cuò)誤,如下:
? ?private TravelAgencyDir travelAgencyDir;
? ? private AirlinerDir airlinerDir;
? ? private FlightDir flightDir;
? ? public MainJFrame() {
? ? ? ? initComponents();
? ? ? ? travelAgencyDir = new TravelAgencyDir();
? ? ? ? airlinerDir = new AirlinerDir();
? ? ? ? flightDir = new FlightDir();
? ? }
在主界面JFrame中,最初我希望把所有的Directory:TravelAgencyDir、AirlinerDir、FlightDir都作為屬性放入到JFrame中,然后在constructor中把它們都實(shí)體化。但是,當(dāng)我在反復(fù)調(diào)試程序中發(fā)現(xiàn),本程序需要多個(gè)相同的Directory,例如很多個(gè)AirlinerDir(因?yàn)橛泻芏鄠€(gè)TravelAgency),固然之前的設(shè)定是錯(cuò)誤的。于是我只把第一個(gè)主界面到它的直接第二頁(yè)面的Directory:TravelAgencyDir創(chuàng)建出來(lái)用來(lái)保存最重要的Agency,其他的Dir都在之后的頁(yè)面再創(chuàng)建。
在添加AirLiner的時(shí)候,我選擇的是對(duì)表格中的Agency選中,進(jìn)入到這個(gè)代理商的頁(yè)面進(jìn)行添加,這樣做的目的是可以讓代理商和航空公司對(duì)應(yīng)上:
TravelAgency ta = (TravelAgency)tblDirectory.getValueAt(selectedRow, 0);
?AirlinerCreateJPanel acPanel = new AirlinerCreateJPanel(userProcessContainer, ta);
把被選中的Agency ta從TA DIR中拿出來(lái),并傳入到航空公司創(chuàng)建頁(yè)面,這樣就可以完成兩個(gè)Dir的連接。當(dāng)我進(jìn)入到航空公司創(chuàng)建頁(yè)面的時(shí)候,我只需要在Create BUTTON下用如下的代碼:
Airliner airliner = travelAgency.getAirlinerDir().addAirliner();
airliner.setAirlinerName(txtAirlinerName.getText());
JOptionPane.showMessageDialog(null, "Created Successfully!");
加粗的代碼是使用TA中嵌套的AirlinerDir的屬性,來(lái)完成一個(gè)實(shí)體化,最終實(shí)現(xiàn)信息保存進(jìn)去。