import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; // CS522 GUI for Simulation // ------------------------- public class CS522App extends JFrame { Color ColorRef[] = new Color[10]; Graphics g = this.getGraphics(); JPanel GraphArea = new JPanel(true); // Shows graphed data JPanel YNumArea = new JPanel(true); // Shows Y axis labels protected JLabel KeyLabel; // Generic Label much used boolean SimPaused=false; // If Sim Paused or not Simulator theSim; // Simulator Object JTextField NSField,NCField,ESField,MSField,RFField; JTextField PFField,CDField,SDField,DDField,OFField,RSField; JButton StartButton, PauseButton, EndButton, ResetButton; JTextArea OutputArea; public CS522App() { // Set up some Main Window Appearance Attributes Container contentPane = getContentPane(); contentPane.setBackground(Color.lightGray); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); contentPane.setLayout(gridbag); c.fill = GridBagConstraints.HORIZONTAL; this.setTitle("CS522 Server/Client Simulation"); OutputArea = new JTextArea(); JScrollPane scroll = new JScrollPane(OutputArea); scroll.setPreferredSize(new Dimension(500,250)); scroll.setMinimumSize(new Dimension(500,250)); scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); c.gridx = 5; c.gridy = 3; c.gridwidth = 6; c.gridheight = 15; gridbag.setConstraints(scroll,c); contentPane.add(scroll); c.gridwidth = 1; c.gridheight = 1; // Label above Text Fields KeyLabel = new JLabel("ENTER SIMULATION PARAMETERS"); c.gridwidth = 2; c.gridx = 2; c.gridy = 1; gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridwidth = 1; // Label above the Output KeyLabel = new JLabel(" SIMULATION OUTPUT WINDOW "); c.gridwidth = 3; c.gridx = 7; c.gridy = 1; gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridwidth = 1; // Buttons on GUI StartButton = new JButton(" Start"); PauseButton = new JButton(" Pause"); EndButton = new JButton(" End "); ResetButton = new JButton(" Reset"); // Start Sim Button c.gridx = 6; c.gridy = 18; c.gridwidth = 1; gridbag.setConstraints(StartButton,c); contentPane.add(StartButton); c.gridwidth = 1; // Pause Sim Button c.gridx = 7; c.gridy = 18; //c.gridwidth = 2; gridbag.setConstraints(PauseButton,c); contentPane.add(PauseButton); //c.gridwidth = 1; // End Sim Button c.gridx = 8; c.gridy = 18; gridbag.setConstraints(EndButton,c); contentPane.add(EndButton); // Reset Sim Button c.gridx = 9; c.gridy = 18; gridbag.setConstraints(ResetButton,c); contentPane.add(ResetButton); // Spacer Label KeyLabel = new JLabel(" "); c.gridx = 1; c.gridy = 2; gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); NCField = new JTextField(5); NSField = new JTextField(5); ESField = new JTextField(5); MSField = new JTextField(5); RFField = new JTextField(5); SDField = new JTextField(5); DDField = new JTextField(5); PFField = new JTextField(5); CDField = new JTextField(5); OFField = new JTextField(8); RSField = new JTextField(5); NCField.setText("" + 30); // Number Clients NSField.setText("" + 2); // Number Servers ESField.setText("" + 200); // End of Simulation Time MSField.setText("" + 10000); // Max File Size Field RFField.setText("" + 7); // Request Frequency Modifier SDField.setText("" + 1); // Server Delay DDField.setText("" + 1); // Director Delay PFField.setText("" + 2000); // Server Response Speed KB/s CDField.setText("" + 8); // Channel Speed OFField.setText("CS522Out.txt"); // Output File Name RSField.setText(""+5); // Add Spacing Label c.gridx = 2; c.gridy = 17; KeyLabel = new JLabel(" "); gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); // Add Label/Field to enter Number Clients c.gridx = 2; c.gridy = 6; KeyLabel = new JLabel("Number of Clients"); gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridx = 3; gridbag.setConstraints(NCField,c); contentPane.add(NCField); // Add Label/Field to enter Number Servers c.gridx = 2; c.gridy = 7; KeyLabel = new JLabel("Number of Servers"); gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridx = 3; gridbag.setConstraints(NSField,c); contentPane.add(NSField); // Add Label/Field to enter End of Simulation Time c.gridx = 2; c.gridy = 8; KeyLabel = new JLabel("End Simulation Time (s)"); gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridx = 3; gridbag.setConstraints(ESField,c); contentPane.add(ESField); // Add Label/Field to enter Max File Size c.gridx = 2; c.gridy = 9; KeyLabel = new JLabel("Max Filesize (KB)"); gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridx = 3; gridbag.setConstraints(MSField,c); contentPane.add(MSField); // Add Label/Field to enter Request Frequency c.gridx = 2; c.gridy = 10; KeyLabel = new JLabel("Request Multiplier (nx)"); gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridx = 3; gridbag.setConstraints(RFField,c); contentPane.add(RFField); // Add Label/Field to enter Request Separation c.gridx = 2; c.gridy = 11; KeyLabel = new JLabel("Min Request Spacing (s)"); gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridx = 3; gridbag.setConstraints(RSField,c); contentPane.add(RSField); // Add Label/Field to enter Server Delay c.gridx = 2; c.gridy = 12; KeyLabel = new JLabel("Server Xfer Delay (s)"); gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridx = 3; gridbag.setConstraints(SDField,c); contentPane.add(SDField); // Add Label/Field to enter Director Delay c.gridx = 2; c.gridy = 13; KeyLabel = new JLabel("Director Delay (s)"); gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridx = 3; gridbag.setConstraints(DDField,c); contentPane.add(DDField); // Add Label/Field to enter Max Channel Delay c.gridx = 2; c.gridy = 14; KeyLabel = new JLabel("Channel Speed (KB/s)"); gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridx = 3; gridbag.setConstraints(CDField,c); contentPane.add(CDField); // Add Label/Field to enter Server Speed c.gridx = 2; c.gridy = 15; KeyLabel = new JLabel("Server Response (KB/s)"); gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridx = 3; gridbag.setConstraints(PFField,c); contentPane.add(PFField); // Add Label/Field to enter File name c.gridx = 2; c.gridy = 16; KeyLabel = new JLabel("Output Filename"); gridbag.setConstraints(KeyLabel,c); contentPane.add(KeyLabel); c.gridx = 3; gridbag.setConstraints(OFField,c); contentPane.add(OFField); StartButton.setEnabled(true); EndButton.setEnabled(false); PauseButton.setEnabled(false); // Action to perform when StartButton is pressed StartButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { //OutputArea.setText(OutputArea.getText() + "YO DUDE"); StartButtonPressed(); } }); // Action to perform when pause button hit PauseButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { PauseButtonPressed(); } }); // Action to perform when hitting the end Button EndButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { EndButtonPressed(); } }); // Action to perform when hitting the end Button ResetButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { ResetButtonPressed(); } }); } // Start Button Pressed, create Simulator public void StartButtonPressed() { String p1; boolean p2; int p3,p4,p5,p6,p7,p8,p9,p10,p11,p12; p1 = OFField.getText().trim(); p2 = true; p3 = (new Integer(NCField.getText().trim())).intValue(); p4 = (new Integer(NSField.getText().trim())).intValue(); p5 = (new Integer(ESField.getText().trim())).intValue(); p6 = (new Integer(MSField.getText().trim())).intValue(); p7 = (new Integer(SDField.getText().trim())).intValue(); p8 = (new Integer(PFField.getText().trim())).intValue(); p9 = (new Integer(RFField.getText().trim())).intValue(); p10 = (new Integer(CDField.getText().trim())).intValue(); p11 = (new Integer(DDField.getText().trim())).intValue(); p12 = (new Integer(RSField.getText().trim())).intValue(); // Create the Simulator Object theSim = new Simulator(p1,p2,p3,p4,p5,p6,p7,p8,p9, p10,p11,p12,this); EndButton.setEnabled(true); StartButton.setEnabled(false); PauseButton.setEnabled(true); ResetButton.setEnabled(false); NCField.setEnabled(false); NSField.setEnabled(false); OFField.setEnabled(false); ESField.setEnabled(false); MSField.setEnabled(false); SDField.setEnabled(false); PFField.setEnabled(false); RFField.setEnabled(false); CDField.setEnabled(false); DDField.setEnabled(false); RSField.setEnabled(false); theSim.startSim(); theSim.start(); } // ---------------------------------------------------- // End Button Pressed by User. End Simulation. // ---------------------------------------------------- public void EndButtonPressed() { StartButton.setEnabled(false); EndButton.setEnabled(false); PauseButton.setEnabled(false); ResetButton.setEnabled(true); theSim.stopSim(); theSim.stop(); theSim.recap(); } // --------------------------------------------------------------- // Pause Button pressed by user. Suspend/Resume simulation thread // --------------------------------------------------------------- public void PauseButtonPressed() { if (SimPaused) { SimPaused = false; theSim.startSim(); PauseButton.setText(" PAUSE"); theSim.resume(); } else { SimPaused = true; theSim.stopSim(); PauseButton.setText("RESUME"); theSim.suspend(); } } // --------------------------------------------------------------- // Reset Button was Pressed // --------------------------------------------------------------- public void ResetButtonPressed() { NCField.setText("" + 30); // Number Clients NSField.setText("" + 2); // Number Servers ESField.setText("" + 200); // End of Simulation Time MSField.setText("" + 10000);// Max File Size Field KB RFField.setText("" + 7); // Request Frequency Modifier SDField.setText("" + 1); // Server Delay DDField.setText("" + 1); // Director Delay PFField.setText("" + 2000); // Server Response Speed KB/s CDField.setText("" + 8); // Channel Speed KB/s OFField.setText("CS522Out.txt"); // Output File Name RSField.setText("" + 5); OutputArea.setText(" "); NCField.setEnabled(true); NSField.setEnabled(true); OFField.setEnabled(true); ESField.setEnabled(true); MSField.setEnabled(true); SDField.setEnabled(true); PFField.setEnabled(true); RFField.setEnabled(true); CDField.setEnabled(true); DDField.setEnabled(true); RSField.setEnabled(true); ResetButton.setEnabled(true); StartButton.setEnabled(true); EndButton.setEnabled(false); PauseButton.setEnabled(false); SimPaused = false; PauseButton.setText(" PAUSE"); } // Return the Area to Print to public JTextArea getOutputArea() { return this.OutputArea; } // Main Method public static void main(String args[]) { CS522App ex = new CS522App(); ex.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); ex.setVisible(true); ex.pack(); } }