⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simulationgui.java

📁 一个飞机调度员模拟训练程序,可以添加跑道数量,控制飞机飞行的速度.默认的密码可以在AtcSystem类里面修改,其中内置了三个用户名.这套系统是我和几个国外同学合力开发的,希望对大家有帮助
💻 JAVA
字号:

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.InterruptedException;
import java.awt.geom.Line2D.Float;
/**
 * Write a description of class SimGUI here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class SimulationGUI implements ActionListener, Runnable, ListSelectionListener
{
    

    
    private JFrame frame1;
    private JPanel mainPanel, bottom;
    
    private Simulation r;
    private SimulationDisplay display;

    private Color backgroundColour;

    private JList dataList;
    private JList runwayList;
    private JButton omgButton;
    private JButton leftButton;
    private JButton rightButton;
    private JButton landButton;
    private JButton queueButton;
    private JButton takeOffButton;
    private JButton menuButton;
    private DefaultListModel dataModel;
    private DefaultListModel runwayModel;
    private Level myLevel;
    
    /**
     * Constructor for objects of class Display
     */
    public SimulationGUI(Level l)
    {
        myLevel = l;
        
        frame1 = new JFrame();
        frame1.setSize(600,600);
        
        SpringLayout layout = new SpringLayout();
        Container content = frame1.getContentPane();
        content.setLayout(layout);

        r = new Simulation(l);
        display = new SimulationDisplay(r);
        
        
        
        omgButton = new JButton("Add plane");
        leftButton = new JButton("Turn left");
        rightButton = new JButton("Turn right");
        landButton = new JButton("Land");
        queueButton = new JButton("Queue");
        takeOffButton = new JButton("Leave");
        menuButton = new JButton("Menu");
        
        dataModel = new DefaultListModel();
        dataList = new JList(dataModel);
        dataList.setFixedCellWidth(200);

        runwayModel = new DefaultListModel();
        runwayList = new JList(runwayModel);
        runwayList.setFixedCellWidth(200);

        JScrollPane scrollPane = new JScrollPane(dataList);
        JScrollPane scrollPane2 = new JScrollPane(runwayList);
        
        (dataList.getSelectionModel()).setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        (runwayList.getSelectionModel()).setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
        for(Runway aRunway : (r.getRunways()))
        {
            runwayModel.addElement(aRunway);   
        }
         
        
         
        content.add(scrollPane);
        content.add(scrollPane2);
        content.add(omgButton);
        content.add(leftButton);
        content.add(rightButton);
        content.add(landButton);
        content.add(queueButton);
        content.add(takeOffButton);
        content.add(menuButton);
        content.add(display);
        
        omgButton.addActionListener(this);
        leftButton.addActionListener(this);
        rightButton.addActionListener(this);
        landButton.addActionListener(this);
        queueButton.addActionListener(this);
        takeOffButton.addActionListener(this);
        menuButton.addActionListener(this);
        dataList.addListSelectionListener(this);

        layout.putConstraint(SpringLayout.NORTH, display, 20, SpringLayout.NORTH, content);
        layout.putConstraint(SpringLayout.WEST, display, 20, SpringLayout.NORTH, content);
        
        layout.putConstraint(SpringLayout.NORTH, scrollPane, 20, SpringLayout.NORTH, display);
        layout.putConstraint(SpringLayout.WEST, scrollPane, 10, SpringLayout.EAST, display);
        
        
        
        
        layout.putConstraint(SpringLayout.NORTH, scrollPane2, 10, SpringLayout.SOUTH, scrollPane);
        layout.putConstraint(SpringLayout.WEST, scrollPane2, 0, SpringLayout.WEST, scrollPane);
        
        
        
        layout.putConstraint(SpringLayout.NORTH, omgButton, 10, SpringLayout.SOUTH, scrollPane2);
        layout.putConstraint(SpringLayout.WEST, omgButton, 10, SpringLayout.WEST, scrollPane2);
        
        layout.putConstraint(SpringLayout.NORTH, leftButton, 10, SpringLayout.SOUTH, omgButton);
        layout.putConstraint(SpringLayout.WEST, leftButton, 0, SpringLayout.WEST, omgButton);
        
        layout.putConstraint(SpringLayout.NORTH, landButton, 10, SpringLayout.SOUTH, leftButton);
        layout.putConstraint(SpringLayout.WEST, landButton, 0, SpringLayout.WEST, leftButton);
        
        layout.putConstraint(SpringLayout.NORTH, queueButton, 10, SpringLayout.SOUTH, scrollPane2);
        layout.putConstraint(SpringLayout.WEST, queueButton, 20, SpringLayout.EAST, omgButton);
        
        layout.putConstraint(SpringLayout.NORTH, rightButton, 10, SpringLayout.SOUTH, queueButton);
        layout.putConstraint(SpringLayout.WEST, rightButton, 20, SpringLayout.EAST, omgButton);
        
        layout.putConstraint(SpringLayout.NORTH, takeOffButton, 10, SpringLayout.SOUTH, rightButton);
        layout.putConstraint(SpringLayout.WEST, takeOffButton, 20, SpringLayout.EAST, omgButton);
        
        layout.putConstraint(SpringLayout.NORTH, menuButton, 50, SpringLayout.SOUTH, takeOffButton);
        layout.putConstraint(SpringLayout.EAST, menuButton, 0, SpringLayout.EAST, takeOffButton);
        
        layout.putConstraint(SpringLayout.SOUTH, content, 50, SpringLayout.SOUTH, menuButton);
        layout.putConstraint(SpringLayout.EAST, content, 50, SpringLayout.EAST, menuButton);
        
        frame1.setTitle("ATCSImulation - " + l.getName());
        
        frame1.pack();  
        display.init();
        
        frame1.setLocationRelativeTo(null);
        frame1.setResizable(false);
        frame1.setVisible(true);

        

        
        // Now start the simulation       
        // Make a new Runnable object

        // Make a new Thread for that Runnable
        Thread t = new Thread(r);
        // Start the thread
        t.start();
        
        Thread s = new Thread(this);
        s.start();
        
    }
    
    // The main loop
    public void refresh()
    {
        // redraw the screen
        frame1.repaint();
        //update the list of planes
        //look at our Simulation's queue of planes to add, if it contains anything, remove it from the queue and add it to our JList


               SwingUtilities.invokeLater(new Runnable() {

                   public void run() {
                                                  while (!r.getToAdd().isEmpty())
        {
                         Aircraft a = (Aircraft) r.getToAdd().poll();
                       ((DefaultListModel) dataList.getModel()).addElement(a);
                        }
                    }
                });
       
        //look at our Simulation's queue of planes to remove, if it contains anything, remove it from the queue and remove it from our JList

               SwingUtilities.invokeLater(new Runnable() {
                   public void run() {
                       while (!r.getToRemove().isEmpty())
                       {
                           Aircraft a = (Aircraft) r.getToRemove().poll();
                           ((DefaultListModel) dataList.getModel()).removeElement(a);
                        }
                    }
                })  ;                         
        
        updateButtons();
    }
    
        public void valueChanged(ListSelectionEvent e)
    {
        updateButtons();
    }
    
    public void updateButtons()
    {
         if (!(dataList.getSelectedIndex() == -1)) 
         {
         Aircraft current = (Aircraft) dataList.getSelectedValue();
         switch (current.getState())
         {
            case 0: leftButton.setEnabled(true);
                    rightButton.setEnabled(true);
                    landButton.setEnabled(false);
                    queueButton.setEnabled(true);
                    break;
            case 1: leftButton.setEnabled(false);
                    rightButton.setEnabled(true);
                    landButton.setEnabled(true);
                    queueButton.setEnabled(true);
                    break;
            case 2: leftButton.setEnabled(true);
                    rightButton.setEnabled(false);
                    landButton.setEnabled(true);
                    queueButton.setEnabled(true);
                    break;
            case 3: leftButton.setEnabled(true);
                    rightButton.setEnabled(true);
                    landButton.setEnabled(true);
                    queueButton.setEnabled(false);
                    break;                   
            case 4: leftButton.setEnabled(true);
                    rightButton.setEnabled(true);
                    landButton.setEnabled(true);
                    queueButton.setEnabled(false);
                    break;
            case 5: leftButton.setEnabled(false);
                    rightButton.setEnabled(false);
                    landButton.setEnabled(false);
                    queueButton.setEnabled(false);
                    break;
            case 6: leftButton.setEnabled(true);
                    rightButton.setEnabled(true);
                    landButton.setEnabled(true);
                    queueButton.setEnabled(false);
                    break;
            case 7: leftButton.setEnabled(false);
                    rightButton.setEnabled(false);
                    landButton.setEnabled(false);
                    queueButton.setEnabled(false);
                    break;
            default:  break;
         }
        if (current.hasLanded()) {takeOffButton.setEnabled(true); } else {takeOffButton.setEnabled(false);}
        }
    }
    
    public void run()
    {
        //Every 10 millisec, refresh the GUI
        while(!r.isFinished())
        {
                // Redraw the display
                refresh();  
                try
                {
                    Thread.sleep(10);
                }
                            //If anything goes wrong, we are fucked
            catch (InterruptedException e)
            {
            }    
        }
        
        String res = new String("Finished level with " + r.getCollisions() + " collisions in " + (r.getTimeTaken()/100) + " seconds");
        Results u = new Results(res, myLevel); frame1.setVisible(false); 
    }
    
    // main() for this, so we can run it outside BlueJ
   
    
    // If the button is pressed, have a look at what was pressed, and add an AircraftEvent to the simulation's queue
    public void actionPerformed(ActionEvent event) {
        if (event.getSource().equals(menuButton)) { UserOptions.show(); frame1.setVisible(false);  }
        // (null, 999) means add a plane
        if (event.getSource().equals(omgButton)) { r.getAircraftEvents().add( new AircraftEvent(null, AircraftEvent.ADD, null) ); } 
        if (!dataList.getSelectionModel().isSelectionEmpty()) {
        if (event.getSource().equals(landButton)) {r.getAircraftEvents().add( new AircraftEvent(((Aircraft) dataList.getSelectedValue()), AircraftEvent.LAND, ((Runway) runwayList.getSelectedValue())) ); }    
        if (event.getSource().equals(leftButton)) {r.getAircraftEvents().add( new AircraftEvent(((Aircraft) dataList.getSelectedValue()), AircraftEvent.TURNLEFT, ((Runway) runwayList.getSelectedValue())) ); }
        if (event.getSource().equals(rightButton)) {r.getAircraftEvents().add( new AircraftEvent(((Aircraft) dataList.getSelectedValue()), AircraftEvent.TURNRIGHT, ((Runway) runwayList.getSelectedValue())) ); }
        if (event.getSource().equals(queueButton)) {r.getAircraftEvents().add( new AircraftEvent(((Aircraft) dataList.getSelectedValue()), AircraftEvent.GOTOQUEUE, ((Runway) runwayList.getSelectedValue())) ); }
        if (event.getSource().equals(takeOffButton)) {r.getAircraftEvents().add( new AircraftEvent(((Aircraft) dataList.getSelectedValue()), AircraftEvent.LEAVE, ((Runway) runwayList.getSelectedValue())) ); }
        
    }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -