/* A basic extension of the java.applet.Applet class */ import java.util.Vector; import java.awt.*; import java.applet.*; import AntClasses.*; import AntClasses.Csimulator; import AntClasses.SimResult; /** * AntApplet is the Main viewable Class. * It is responsible for the Graphical User * Interface , And stands at Top of the hirarchy * * @author Amir Schnider & Sharon Salmon * @version 1.0 */ public class AntApplet extends Applet { /** * The simulator Object. * * @see Csimulator */ // graph information Csimulator sim = new Csimulator(1); int Prob=50; // probability for edges int vertixes = 5; // number of vertices /** * The graph Object on which the Ant(s) is drawn. * * @since 1999 * @see Graph */ Graph graph = new Graph(); // this object hold the information of the graph boolean isPaused = false; // flag conected to the pause button /** * Array of ants. * * @since 1999 * @see Ant */ Ant ant[]; // array of graphic ants int m_fps = 100; // frames per second int nSleepTime = 1000 / m_fps; int m_Size = 7; // size of the ant int max_x,max_y,min_x,min_y; int NumOfAnts = 1; // the number of ants int Starts[] = {0,4};// the starting positions of the ants boolean IsRandom = true; Point lastEdge = null; // the last edge that was drawn in "user mode" // double buffering image private Image m_image= null;// offscreen image private Graphics m_g = null; // associated graphics object Dimension m_dimImage; // size of offscreen image // backgroung image private Image bg_image;// offscreen image private Graphics bg_g; // associated graphics object int LastSelectedVertex = -1; // for "user mode" purposes Vector v; // vector of the graph boolean SelectVertex = false; // flag for the "user mode" // points for "user mode" Point Point1; Point Point2; /** * this function is called when the Applet is initialized. * It Takes kare of all the initial look of the GUI, * register Buttons,Labels & othe components,. * And Initialize the Classes that are agregated in the Applet. */ public void init() { // Take out this line if you don't use symantec.itools.net.RelativeURL or symantec.itools.awt.util.StatusScroller // symantec.itools.lang.Context.setApplet(this); // This code is automatically generated by Visual Cafe when you add // components to the visual environment. It instantiates and initializes // the components. To modify the code, only use code syntax that matches // what Visual Cafe can generate, or Visual Cafe may be unable to back // parse your Java file into its visual environment. //{{INIT_CONTROLS setLayout(null); setBackground(new java.awt.Color(64,0,128)); setSize(683,373); list1.addItem("Please Set The Number"); list1.addItem("Of Vertices And Push"); list1.addItem("\" Draw Graph\",Then Push"); list1.addItem("\"Start Ant\""); list1.addItem("Use \"User Defined \" to create your own"); list1.addItem("Graph, Drag the mouse between Vertices "); list1.addItem("in order to add Edges."); list1.addItem("In \"Random Graph \" you can set the "); list1.addItem("probabilty for each edge with the spinner."); list1.setBackground(java.awt.Color.yellow); list1.setFont(new Font("Dialog", Font.BOLD, 14)); add(list1); list1.setBounds(12,36,360,192); list1.setVisible(false); panel1.setLayout(null); add(panel1); panel1.setBackground(java.awt.Color.lightGray); panel1.setBounds(384,12,150,144); panel4.setLayout(null); panel1.add(panel4); panel4.setBackground(java.awt.Color.gray); panel4.setBounds(12,72,132,60); labelTime.setText("Time: 0"); labelTime.setAlignment(java.awt.Label.CENTER); panel4.add(labelTime); labelTime.setBackground(java.awt.Color.white); labelTime.setFont(new Font("Dialog", Font.BOLD, 16)); labelTime.setBounds(12,12,108,36); panel2.setLayout(null); panel1.add(panel2); panel2.setBackground(java.awt.Color.gray); panel2.setBounds(3,12,144,48); ButtonStartant.setLabel(">"); ButtonStartant.setEnabled(false); panel2.add(ButtonStartant); ButtonStartant.setBackground(java.awt.Color.orange); ButtonStartant.setFont(new Font("Dialog", Font.BOLD, 14)); ButtonStartant.setBounds(36,12,24,24); ButtonStop.setLabel("!"); ButtonStop.setEnabled(false); panel2.add(ButtonStop); ButtonStop.setBackground(java.awt.Color.orange); ButtonStop.setFont(new Font("Dialog", Font.BOLD, 12)); ButtonStop.setBounds(12,12,24,24); ButtonClear.setLabel("C"); ButtonClear.setEnabled(false); panel2.add(ButtonClear); ButtonClear.setBackground(java.awt.Color.orange); ButtonClear.setFont(new Font("Dialog", Font.BOLD, 12)); ButtonClear.setBounds(84,12,24,24); ButtonPause.setLabel("||"); ButtonPause.setEnabled(false); panel2.add(ButtonPause); ButtonPause.setBackground(java.awt.Color.orange); ButtonPause.setFont(new Font("MonoSpaced", Font.BOLD, 12)); ButtonPause.setBounds(60,12,24,24); ButtonDrawGraph.setLabel("@"); panel2.add(ButtonDrawGraph); ButtonDrawGraph.setBackground(java.awt.Color.orange); ButtonDrawGraph.setFont(new Font("Dialog", Font.BOLD, 12)); ButtonDrawGraph.setBounds(108,12,24,24); panel5.setLayout(null); add(panel5); panel5.setBackground(java.awt.Color.lightGray); panel5.setBounds(384,168,150,72); radioUser.setCheckboxGroup(Group2); radioUser.setLabel("User Defined "); panel5.add(radioUser); radioUser.setFont(new Font("Dialog", Font.PLAIN, 12)); radioUser.setBounds(7,36,132,24); radioRandom.setCheckboxGroup(Group2); radioRandom.setState(true); radioRandom.setLabel("Random Graph"); panel5.add(radioRandom); radioRandom.setBounds(7,12,108,16); panel6.setLayout(null); add(panel6); panel6.setBackground(java.awt.Color.lightGray); panel6.setBounds(540,12,140,228); panel6.add(ScrollProb); ScrollProb.setBounds(108,12,24,60); ScrollSpeed.setEnabled(false); panel6.add(ScrollSpeed); ScrollSpeed.setBounds(108,84,24,60); ScrollSpeed.setVisible(false); labelProb.setText("Prob: 50%"); labelProb.setAlignment(java.awt.Label.CENTER); panel6.add(labelProb); labelProb.setBackground(java.awt.Color.yellow); labelProb.setFont(new Font("Dialog", Font.BOLD, 14)); labelProb.setBounds(12,24,100,40); labelSpeed.setText("Speed: 30"); labelSpeed.setAlignment(java.awt.Label.CENTER); labelSpeed.setEnabled(false); panel6.add(labelSpeed); labelSpeed.setBackground(java.awt.Color.yellow); labelSpeed.setFont(new Font("Dialog", Font.BOLD, 14)); labelSpeed.setBounds(12,96,100,40); labelSpeed.setVisible(false); labelVertixes.setText("Vertices: 5"); labelVertixes.setAlignment(java.awt.Label.CENTER); panel6.add(labelVertixes); labelVertixes.setBackground(java.awt.Color.yellow); labelVertixes.setFont(new Font("Dialog", Font.BOLD, 14)); labelVertixes.setBounds(12,168,96,40); panel6.add(ScrollVertices); ScrollVertices.setBounds(108,156,24,60); labelHelp.setText("Help"); labelHelp.setAlignment(java.awt.Label.CENTER); add(labelHelp); labelHelp.setBackground(java.awt.Color.orange); labelHelp.setFont(new Font("Dialog", Font.BOLD, 12)); labelHelp.setBounds(5,5,48,24); buttonUndo.setLabel(" Undo"); buttonUndo.setEnabled(false); add(buttonUndo); buttonUndo.setBackground(java.awt.Color.orange); buttonUndo.setFont(new Font("Dialog", Font.BOLD, 12)); buttonUndo.setBounds(324,12,48,24); buttonUndo.setVisible(false); panel3.setLayout(null); add(panel3); panel3.setBackground(java.awt.Color.lightGray); panel3.setBounds(540,252,132,84); radioOneAnt.setCheckboxGroup(Group1); radioOneAnt.setState(true); radioOneAnt.setLabel("One Ant"); panel3.add(radioOneAnt); radioOneAnt.setBounds(12,0,100,40); radioTwoAnts.setCheckboxGroup(Group1); radioTwoAnts.setLabel("Two Ants"); panel3.add(radioTwoAnts); radioTwoAnts.setBounds(12,36,100,40); label1.setAlignment(java.awt.Label.CENTER); add(label1); label1.setBackground(java.awt.Color.pink); label1.setFont(new Font("Dialog", Font.BOLD|Font.ITALIC, 12)); label1.setBounds(252,60,120,40); label1.setVisible(false); //}} sim.init(); // initialise the simulator min_x = min_y = 20; max_x = max_y = 200; // creating the background image which will be round circle bg_image = createImage(600,500); bg_g = bg_image.getGraphics(); DrawBackGround(bg_g); ant = new Ant[2]; for(int i = 0;i<2;i++) { ant[i] = new Ant(i); add(ant[i]); } //{{REGISTER_LISTENERS SymAdjustment lSymAdjustment = new SymAdjustment(); ScrollProb.addAdjustmentListener(lSymAdjustment); ScrollSpeed.addAdjustmentListener(lSymAdjustment); ScrollVertices.addAdjustmentListener(lSymAdjustment); SymMouse aSymMouse = new SymMouse(); ButtonDrawGraph.addMouseListener(aSymMouse); ButtonStartant.addMouseListener(aSymMouse); ButtonStop.addMouseListener(aSymMouse); ButtonClear.addMouseListener(aSymMouse); this.addMouseListener(aSymMouse); SymMouseMotion aSymMouseMotion = new SymMouseMotion(); this.addMouseMotionListener(aSymMouseMotion); SymItem lSymItem = new SymItem(); radioUser.addItemListener(lSymItem); radioRandom.addItemListener(lSymItem); ButtonClear.addMouseMotionListener(aSymMouseMotion); ButtonPause.addMouseListener(aSymMouse); labelHelp.addMouseListener(aSymMouse); buttonUndo.addMouseListener(aSymMouse); SymFocus aSymFocus = new SymFocus(); this.addFocusListener(aSymFocus); radioOneAnt.addItemListener(lSymItem); radioTwoAnts.addItemListener(lSymItem); //}} } //{{DECLARE_CONTROLS java.awt.List list1 = new java.awt.List(4); java.awt.Panel panel1 = new java.awt.Panel(); java.awt.Panel panel4 = new java.awt.Panel(); java.awt.Label labelTime = new java.awt.Label(); java.awt.Panel panel2 = new java.awt.Panel(); java.awt.Button ButtonStartant = new java.awt.Button(); java.awt.Button ButtonStop = new java.awt.Button(); java.awt.Button ButtonClear = new java.awt.Button(); java.awt.Button ButtonPause = new java.awt.Button(); java.awt.Button ButtonDrawGraph = new java.awt.Button(); java.awt.Panel panel5 = new java.awt.Panel(); java.awt.Checkbox radioUser = new java.awt.Checkbox(); java.awt.CheckboxGroup Group2 = new java.awt.CheckboxGroup(); java.awt.Checkbox radioRandom = new java.awt.Checkbox(); java.awt.Panel panel6 = new java.awt.Panel(); java.awt.Scrollbar ScrollProb = new java.awt.Scrollbar(Scrollbar.VERTICAL,50,1,0,100); java.awt.Scrollbar ScrollSpeed = new java.awt.Scrollbar(Scrollbar.VERTICAL,60,1,20,200); java.awt.Label labelProb = new java.awt.Label(); java.awt.Label labelSpeed = new java.awt.Label(); java.awt.Label labelVertixes = new java.awt.Label(); java.awt.Scrollbar ScrollVertices = new java.awt.Scrollbar(Scrollbar.VERTICAL,5,1,5,15); java.awt.Label labelHelp = new java.awt.Label(); java.awt.Button buttonUndo = new java.awt.Button(); java.awt.Panel panel3 = new java.awt.Panel(); java.awt.Checkbox radioOneAnt = new java.awt.Checkbox(); java.awt.CheckboxGroup Group1 = new java.awt.CheckboxGroup(); java.awt.Checkbox radioTwoAnts = new java.awt.Checkbox(); java.awt.Label label1 = new java.awt.Label(); //}} /** * This function is called when the Applet start or * By update , And paints the Graph Area * * @param g This is the Device Context on which the graph is been Drawn. */ public void paint(Graphics g) { // repaint existing image if (m_image != null) { g.drawImage(m_image, 0, 0, null); } } /** * This function is called whenever the Applet * or one of its Component ask for repaint(); * It draws the Graph at the background ,than * call paint(). * This technique is called "double buffering" * and it prevents flashing screen. * * @param g Device Context for drawing. * In this case it is for an BackGround image. */ public void update(Graphics g) { // make sure that the image is the same size as // the applet's window ResizeImage(); // draws the background m_g.drawImage(bg_image,0,0,null); for(int i = 0;i