📄 emluatordemo.java
字号:
StringBuffer information=new StringBuffer();//存储车站信息
BusStation bs;//station所代表的车站(西安或宝鸡)
if(station.equals(jTextAreaXN)){//根据文本框station的名字取站
bs=solve.XNStation;
}else{
bs=solve.BJStation;
}
information.append("站内乘客数:"+solve.XNStation.passNum()+"\n");
information.append("依维柯:\n");
//从车站station中的依维柯队列中取出所有Iveco车辆的车牌号
for(int i=0;i<bs.ivecoQueue.size();i++){
information.append(((Iveco)bs.ivecoQueue.get(i)).getLicenseNumber());
information.append(" ");
if((i+1)%6==0) information.append("\n");
}
information.append("\n沃尔沃:\n");
//从车站station中的沃尔沃队列中取出所有Volvo车辆的车牌号
for(int j=0;j<bs.volvoQueue.size();j++){
information.append(((Volvo)bs.volvoQueue.get(j)).getLicenseNumber());
information.append(" ");
if((j+1)%6==0) information.append("\n");
}
station.setText(information.toString());
}
//更新监控车辆信息
public void refreshCarInfo(){
String carType=jComboBoxCar.getSelectedItem().toString().substring(0,3);
String carNum=jSpinnerCarNum.getValue().toString();
String carLicenceNum=carType+carNum;
System.out.println(carLicenceNum);
Vehicle car=null;
//检查所监控的车辆是否在西安站内,在则取出
for(int i=0;i<solve.XNStation.ivecoQueue.size();i++){
String testLicenceNum=((Vehicle)solve.XNStation.ivecoQueue.get(i)).getLicenseNumber();
if(testLicenceNum.equals(carLicenceNum)) car=(Vehicle)solve.XNStation.ivecoQueue.get(i);
}
for(int i=0;i<solve.XNStation.volvoQueue.size();i++){
String testLicenceNum=((Vehicle)solve.XNStation.volvoQueue.get(i)).getLicenseNumber();
if(testLicenceNum.equals(carLicenceNum)) car=(Vehicle)solve.XNStation.volvoQueue.get(i);
}
//检查所监控的车辆是否在宝鸡站内,在则取出
for(int i=0;i<solve.BJStation.ivecoQueue.size();i++){
String testLicenceNum=((Vehicle)solve.BJStation.ivecoQueue.get(i)).getLicenseNumber();
if(testLicenceNum.equals(carLicenceNum)) car=(Vehicle)solve.BJStation.ivecoQueue.get(i);
}
for(int i=0;i<solve.BJStation.volvoQueue.size();i++){
String testLicenceNum=((Vehicle)solve.BJStation.volvoQueue.get(i)).getLicenseNumber();
if(testLicenceNum.equals(carLicenceNum)) car=(Vehicle)solve.BJStation.volvoQueue.get(i);
}
//检查所监控的车辆是否在开往宝鸡的路上,在则取出
for(int i=0;i<solve.carMovingToBJ.size();i++){
String testLicenceNum=((Vehicle)solve.carMovingToBJ.get(i)).getLicenseNumber();
if(testLicenceNum.equals(carLicenceNum)) car=(Vehicle)solve.carMovingToBJ.get(i);
}
//检查所监控的车辆是否在开往西安的路上,在则取出
for(int i=0;i<solve.carMovingToXN.size();i++){
String testLicenceNum=((Vehicle)solve.carMovingToXN.get(i)).getLicenseNumber();
if(testLicenceNum.equals(carLicenceNum)) car=(Vehicle)solve.carMovingToXN.get(i);
}
StringBuffer carInfo=new StringBuffer();//存储监控车辆的信息
//根据取出的车辆设置车辆信息
if(car==null) carInfo.append("此编号车辆不存在");
else{
carInfo.append("车牌号:" + carLicenceNum + "\n");
carInfo.append("车辆限载:"+car.maxPass()+"\n");
NumberFormat s = NumberFormat.getInstance();
s.setMaximumFractionDigits(1);
carInfo.append("车速:"+s.format(car.getSpeed())+"km/m\n");
carInfo.append("车内有乘客:"+car.getPassNum()+"人\n");
if(car.isMoving()) {
NumberFormat a = NumberFormat.getInstance();//创建NumberFormat对象,用来格式化输出double类型的距离变量的值
a.setMaximumFractionDigits(1);//设置只显示一位小数
if (car.getDisAwayLasted() < car.speed)
carInfo.append("车正停在" + car.getLastedStation() + "站\n");
else {
if (car.getDirection() == 1) {
carInfo.append(carLicenceNum + "在距离" + car.getLastedStation() +
"以西" + a.format(car.getDisAwayLasted()) + "\n");
} else {
carInfo.append(carLicenceNum + "在距离" + car.getLastedStation() +
"以东" + a.format(car.getDisAwayLasted()) + "\n");
}
}
}
else carInfo.append("车正停在"+car.getLastedStation()+"站\n");
}
jTextAreaCar.setText(carInfo.toString());
}
//线程的运行
public void run(){
for(int i=0;i<770;i++){
emluatorSpeed=jSliderSpeed.getValue();//获取本次循环的仿真速度
hour = (int) (i + 30) / 60 + 7;
minute = (i + 30) % 60;
try{
Thread.sleep(emluatorSpeed);
}catch(Exception e){
System.out.println(e.getMessage());
}
solve.simulate(i);//仿真逻辑的一次运行
jLabelTime.setText(hour + ":" + minute);//更新时间
refreshStationInfo(jTextAreaXN);//更新西安车站情况
refreshStationInfo(jTextAreaBJ);//更新宝鸡车站情况
refreshCarInfo();//更新监控车辆信息
jPanelDisplay.repaint();
}
}
void jButtonStart_actionPerformed(ActionEvent e) {
//从UI中获取初始化参数
XN_V=((Integer)jSpinnerXNV.getValue()).intValue();//获取西安沃尔沃数量
XN_I=((Integer)jSpinnerXNI.getValue()).intValue();//获取西安依维柯数量
BJ_V=((Integer)jSpinnerBJV.getValue()).intValue();//获取宝鸡沃尔沃数量
BJ_I=((Integer)jSpinnerBJI.getValue()).intValue();//获取宝鸡依维柯数量
P_MAX=((Integer)jSpinnerPNM.getValue()).intValue();//获取每分钟产生的人数上限
if (emluator == null) {//第一次点击“开始”按钮,此时emluator=null
solve=new Emluator(XN_V,XN_I,BJ_V,BJ_I,P_MAX);//创建仿真逻辑对象
jSpinnerXNV.setEnabled(false);
jSpinnerXNI.setEnabled(false);
jSpinnerBJV.setEnabled(false);
jSpinnerBJI.setEnabled(false);
jSpinnerPNM.setEnabled(false);
emluator=new Thread(this);//创建主线程,实现仿真及显示的更新
emluator.start();//启动线程
}else{
emluator.resume();
}
jButtonStart.setEnabled(false);
jButtonStop.setEnabled(true);
}
void jButtonStop_actionPerformed(ActionEvent e) {
if(emluator!=null) {
emluator.suspend();//挂起线程
}
jButtonStop.setEnabled(false);
jButtonStart.setEnabled(true);
}
void jButtonCancel_actionPerformed(ActionEvent e) {
System.exit(0);
}
}
class EmluatorDemo_jButtonStart_actionAdapter implements java.awt.event.ActionListener {
EmluatorDemo adaptee;
EmluatorDemo_jButtonStart_actionAdapter(EmluatorDemo adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButtonStart_actionPerformed(e);
}
}
class EmluatorDemo_jButtonStop_actionAdapter implements java.awt.event.ActionListener {
EmluatorDemo adaptee;
EmluatorDemo_jButtonStop_actionAdapter(EmluatorDemo adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButtonStop_actionPerformed(e);
}
}
class EmluatorDemo_jButtonCancel_actionAdapter implements java.awt.event.ActionListener {
EmluatorDemo adaptee;
EmluatorDemo_jButtonCancel_actionAdapter(EmluatorDemo adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButtonCancel_actionPerformed(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -