本次作业中,需要创建多个 Agency 来申请航空公司的航班。在创建的TravelAgency这个类当中,由于每个Agency可以选择自己需要的航空公司的航班,所以我们需要给TravelAgency中添加 AirlinerDir,AirlinerDir是用来保存Airliner对象的ArrayList。并且需要注意,在每一次new一个 TravelAgency 以后,都需要创建一个这个Agency对应的AirlinerDir。所以使用再Constructor里新建的方式来避免NullPointerException. 代码如下。
public class TravelAgency {
private String agencyName;
private AirlinerDir airlinerDir;
public TravelAgency() {
this.airlinerDir = new AirlinerDir();
}
最刚开始犯了一个错误,如下:
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中把它们都实体化。但是,当我在反复调试程序中发现,本程序需要多个相同的Directory,例如很多个AirlinerDir(因为有很多个TravelAgency),固然之前的设定是错误的。于是我只把第一个主界面到它的直接第二页面的Directory:TravelAgencyDir创建出来用来保存最重要的Agency,其他的Dir都在之后的页面再创建。
在添加AirLiner的时候,我选择的是对表格中的Agency选中,进入到这个代理商的页面进行添加,这样做的目的是可以让代理商和航空公司对应上:
TravelAgency ta = (TravelAgency)tblDirectory.getValueAt(selectedRow, 0);
AirlinerCreateJPanel acPanel = new AirlinerCreateJPanel(userProcessContainer, ta);
把被选中的Agency ta从TA DIR中拿出来,并传入到航空公司创建页面,这样就可以完成两个Dir的连接。当我进入到航空公司创建页面的时候,我只需要在Create BUTTON下用如下的代码:
Airliner airliner = travelAgency.getAirlinerDir().addAirliner();
airliner.setAirlinerName(txtAirlinerName.getText());
JOptionPane.showMessageDialog(null, "Created Successfully!");
加粗的代码是使用TA中嵌套的AirlinerDir的属性,来完成一个实体化,最终实现信息保存进去。