• 0

Java Programming: Ant Simulator..


Question

Hey guys, I guess it'd be a good idea to explain the basic principle of this program since knowing my Java 'skills' I'll be asking a lot of questions regarding it.

It will basically consist of an "add ant" button that will create an ant in a little panel, each ant has it's own ID (1-10, 10 being the maximum amount of ants) and it's own unique colour. There will be ten radio buttons below the panel so that the user can select what ant they want to move, and they can actually move the ant by using the arrow keys.

The 'ant type' box is disabled at the moment, there's no real need to have it, although I stuck it on there because it may be implemented at a later date.

Here's the code at present:

/* Ant.java
   A program created to simulate an ant colony.
   Author : Nick Drew
   Date : 15/02/2005
   Ref : U30.01 - Java Programming  */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.DecimalFormat;

public class Ant extends JFrame
{
   int colonySize = 0;
   int[] index = new int[10];
   
   // JLabel and JTextfield for Ant Type
   private JLabel typeJLabel;
   private JTextField typeJTextField;

   // JButton to create an ant
   private JButton createJButton;

   // JTextArea to display results
   private JTextArea backgroundJTextArea;
   
   // JLabel for the Instructions
   private JLabel instructionsJLabel;
   
   // JLabels for the Ants
   private JLabel antOneJLabel;
   private JLabel antTwoJLabel;
   private JLabel antThreeJLabel;
   private JLabel antFourJLabel;   
   private JLabel antFiveJLabel;
   private JLabel antSixJLabel;   
   private JLabel antSevenJLabel;
   private JLabel antEightJLabel;   
   private JLabel antNineJLabel;
   private JLabel antTenJLabel;
   
   // JLabels for the Key
   private JLabel keyOneJLabel;
   private JLabel keyTwoJLabel;
   private JLabel keyThreeJLabel;
   private JLabel keyFourJLabel;   
   private JLabel keyFiveJLabel;
   private JLabel keySixJLabel;   
   private JLabel keySevenJLabel;
   private JLabel keyEightJLabel;   
   private JLabel keyNineJLabel;
   private JLabel keyTenJLabel;
   
   // no-argument constructor
   public Ant()
   {
      createUserInterface();
   }
   
   // create and position GUI components; register event handlers
   private void createUserInterface()
   {   
      // get content pane and set layout to null
      Container contentPane = getContentPane();
      contentPane.setLayout( null );

      // set up typeJLabel
      typeJLabel = new JLabel();
      typeJLabel.setBounds( 164, 22, 80, 21 );
      typeJLabel.setText( "Ant Type:" );
      contentPane.add( typeJLabel );
         
      // set up typeJTextField
      typeJTextField = new JTextField();
      typeJTextField.setBounds( 238, 22, 98, 21 );
      typeJTextField.setHorizontalAlignment( JTextField.RIGHT );
      typeJTextField.setEnabled( false );
      contentPane.add( typeJTextField );
      
      /* ----------------------------- */
      /* Start Of Key / Selection Area */
      
      // set up instructionsJLabel
      instructionsJLabel = new JLabel();
      instructionsJLabel.setBounds( 136, 328, 226, 21 );
      instructionsJLabel.setText( "Please select the ant you wish to move." );
      contentPane.add( instructionsJLabel );
      
      // set up keyOneJLabel
      keyOneJLabel = new JLabel();
      keyOneJLabel.setBounds( 68, 348, 80, 21 );
      keyOneJLabel.setText( "?" );
      keyOneJLabel.setForeground(Color.BLACK);
      contentPane.add( keyOneJLabel );
      
      // set up keyTwoJLabel
      keyTwoJLabel = new JLabel();
      keyTwoJLabel.setBounds( 68, 368, 80, 21 );
      keyTwoJLabel.setText( "?" );
      keyTwoJLabel.setForeground(Color.BLUE);
      contentPane.add( keyTwoJLabel );
      
      // set up keyThreeJLabel
      keyThreeJLabel = new JLabel();
      keyThreeJLabel.setBounds( 68, 388, 80, 21 );
      keyThreeJLabel.setText( "?" );
      keyThreeJLabel.setForeground(Color.CYAN);
      contentPane.add( keyThreeJLabel );
      
      // set up keyFourJLabel
      keyFourJLabel = new JLabel();
      keyFourJLabel.setBounds( 68, 408, 80, 21 );
      keyFourJLabel.setText( "?" );
      keyFourJLabel.setForeground(Color.GREEN);
      contentPane.add( keyFourJLabel );
      
      // set up keyFiveJLabel
      keyFiveJLabel = new JLabel();
      keyFiveJLabel.setBounds( 68, 428, 80, 21 );
      keyFiveJLabel.setText( "?" );
      keyFiveJLabel.setForeground(Color.ORANGE);
      contentPane.add( keyFiveJLabel );
      
      // set up keySixJLabel
      keySixJLabel = new JLabel();
      keySixJLabel.setBounds( 268, 348, 80, 21 );
      keySixJLabel.setText( "?" );
      keySixJLabel.setForeground(Color.PINK);
      contentPane.add( keySixJLabel );
      
      // set up keySevenJLabel
      keySevenJLabel = new JLabel();
      keySevenJLabel.setBounds( 268, 368, 80, 21 );
      keySevenJLabel.setText( "?" );
      keySevenJLabel.setForeground(Color.RED);
      contentPane.add( keySevenJLabel );
      
      // set up keyEightJLabel
      keyEightJLabel = new JLabel();
      keyEightJLabel.setBounds( 268, 388, 80, 21 );
      keyEightJLabel.setText( "?" );
      keyEightJLabel.setForeground(Color.BLUE);
      contentPane.add( keyEightJLabel );
      
      // set up keyNineJLabel
      keyNineJLabel = new JLabel();
      keyNineJLabel.setBounds( 268, 408, 80, 21 );
      keyNineJLabel.setText( "?" );
      keyNineJLabel.setForeground(Color.MAGENTA);
      contentPane.add( keyNineJLabel );
      
      // set up keyTenJLabel
      keyTenJLabel = new JLabel();
      keyTenJLabel.setBounds( 268, 428, 80, 21 );
      keyTenJLabel.setText( "?" );
      keyTenJLabel.setForeground(Color.YELLOW);
      contentPane.add( keyTenJLabel );
      
                  
      // set up createJButton and register its event handler
      createJButton = new JButton();
      createJButton.setBounds( 198, 58, 94, 24 );
      createJButton.setText( "Create Ant" );
      contentPane.add( createJButton );
      createJButton.addActionListener( 
       new ActionListener() // anonymous inner class
         {
            // method called when user clicks createJButton
            public void actionPerformed( ActionEvent event )
            {
               createJButtonActionPerformed( event );
            }      
         } // end anonymous inner class
         
      ); // end call to addActionListener
      
      //setup backgroundJTextArea
      backgroundJTextArea = new JTextArea();
      backgroundJTextArea.setBounds( 46, 86, 386, 246 );
   backgroundJTextArea.setEditable( false );
      contentPane.add( backgroundJTextArea );
      
      // set properties of window
      setTitle( "Java Ant Class" );  	// set window's title
      setSize( 488, 488 );                  // set window's size
      setVisible( true );                   // display window
      
   } // end method createUserInterface
   
   // method called when user clicks calculateJButton
   private void createJButtonActionPerformed( ActionEvent event )
   {  
      JOptionPane.showMessageDialog(null, "Add Ant, etc");
   } // end method calculateJButtonActionPerformed
  
   // main method
   public static void main( String[] args )
   {
      Ant application = new Ant();
      application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

   } // end method main
   
} // end class Ant

Edited by blizeH
Link to comment
https://www.neowin.net/forum/topic/287825-java-programming-ant-simulator/
Share on other sites

20 answers to this question

Recommended Posts

  • 0

if you really want to get a bit advanced and you know html. use JEditor Pane. you could add a real picture of an ant.

just refer to a image file just like in normal html.

 JEditorPane htmlEditor = new JEditorPane("text/html","<HTML>" +
 ? ? ? ? ? ? ? ? ? ? ? "<head></head>"+
                       "<body>" +
 ? ?                   "<B>HELLO<B>"+ ?
 ? ? ? ?               "</body>"+
 ? ? ? ? ? ? ? ? ? ? ? "</HTML>");

  • 0

Nooo, I wish I'd read this thread earlier and saw that, HTML is so much easier than Java it's not even funny :p

Anyway...

I've now got the layout working Ok, it doesn't look great but it does work, so it'll do for now I think! Here's an image of it:

ant.jpg

Ok, here's my next question and this is where it gets tricky. I've edited the first post to show how my code looks at present.

I need to code the 'create ant' button to create a JLabel ( antOneJLabel etc to be precise ) to appear in the middle of the white box. The problem is, the only way I can think of this is by using a while loop, which creates all ten ants at once (doh) and even worse, they don't use the appropiate ID set in index, they're all the same colour etc too. How do I set it so that each time I click add new ant it adds the ants in order, with the appropiate colour and the appropiate index number?

Any suggestions extremely welcome because I'm completely stumped.

  • 0

I'm not sure if this is what you want but Ill post it anyway...

  Quote
public class Ant extends JFrame implements ActionListener

{

...in create part

createJButton.addActionListener(this); //listen to button clicks

//creates a JLabel

private JLabel createAntLabel(int antType)

{

? if (antType == 1)

? ? ?return new JLabel("1");

? else

? if (antType == 2)

? ? ?return new JLabel("2");

?else

? if (antType == 3)

? ? ?return new JLabel("3");

?...etc

}

//listen to mouse clicks

public void actionPerformed(ActionEvent e)

{

if(e.getSource == createJButton)

???????? - put what ant index you are creating herecreating here

? ? ?  antPanel.add(createAntLabel(antType)); //note: the position of the label will depend on the layout manager used and how it has been setup

? ? }

}

Edited by liykh001
  • 0

Two hours down the line and I must admit I am completely and utterly stumped, I've started again countless times and I don't seem to be getting anywhere.

I'm getting errors mostly in the last section of code, I've had to change the antType thing to index since antType isn't actually going to play any role in the program (sorry, should of made this more clear).

I've pasted the current code (which isn't working, at all) here or if someone could add me on MSN ( kissitgoodbye (at) hotmail.co.uk ) that'd be fantastic, thanks :)

  • 0

Hmm, I dont have time to help you much more with this today sorry.....

I have fixed you compile errors, but ..... I cant get the layout manager to work for some reason....

HELP ME :D

when you do antPanel.add(<aw label>), the labels keep getting overlayed with each other. I tried to work out the problem, but cant put my finger on it.

Ant.zipFetching info...

  • 0

I'm using a program called JCreator ( www.jcreator.com ) so I'm having to code all of the interface by hand.

I've now spent about 10 hours on this and I'm getting absolutely no where, I really appreciate the help (especially from liykh001, superstar!) but I hate this langauge so much, I've lost all motivation and I've completely given up.

In true despiration, I'm going to offer anyone who can help me a lot ?15 or so for their help, I know I shouldn't be doing this but it's honestly driving me insane! Oh, if you're over 18 I'll also throw in a 'lil something extra that you may find useful, infact, for sure you'll find it useful and i'll talk you through it for as long as it takes.

blizeH ( at ) gmail.com

liyk001 gets first refusal (although I'm sure he'll decline, as will everyone else knowing my luck) since he's been such a fantastic help so far:))

Edit: WE HAVE A WINNER! (sorry just saw the attachment liyk001 ;x) add me up to msn - kissitgoodbye (at ) hotmail.co.uk please:))

  • 0

No real rush, although sometime during or before the weekend would be fantastic, it looks to be almost complete now it's not going to requite a lot of work from now on I wouldn't of thought :) Either way add me up and I'll give you something via PayPal to say thanks for the help so far :)

  • 0

I don't care if you don't need the money, I want to thank you so even if you buy yourself a computer game, a java book or whatever with it that's fine :)

One thing I didn't make very clear is that the JTextLabel at the top (antType) doesn't actually do anything, it's not really suppose to, the ants are supposed to be added in order I do believe (click it and it adds ant 1, then again it adds ant 2 - this is all done via the index variable). I think that's the way it works, although I may be wrong.

Again, thank you so much for your help, you really are an absolute star :D

  • 0

liykh001 thank you so much!!! You really are an absolute hero, lol!

Now, my final question :$ I need to be able to select the ants and move them around, I've found this sample of a radio button but it doesn't let you place the radio buttons where you want so I guess it's pretty useless.

http://java.sun.com/docs/books/tutorial/ui...tml#radiobutton

I also found something regarding the keypress event but am not really sure how to implement it, especially not the bit that actually moves it :(

  • 0
  blizeH said:

Now, my final question :$ I need to be able to select the ants and move them around, I've found this sample of a radio button but it doesn't let you place the radio buttons where you want so I guess it's pretty useless. 

http://java.sun.com/docs/books/tutorial/ui...tml#radiobutton

I also found something regarding the keypress event but am not really sure how to implement it, especially not the bit that actually moves it :(

585520446[/snapback]

Well that will be harder :o, espcially trying to move html text :)

maybe you want to go back to grid layout then if your main purpose is to move ants not add them. if you are going to use the html editor version, you will need to move the ants in the same way that you can highlight and move MS Words to different parts of a paragraph.

This is as far as I go on this .... sorry your on your own....

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Go ###### yourself Apple. What an embarassing piece of ###### company.
    • From code to combat: Meta CTO calls for Silicon Valley involvement in military contracts by Hamid Ganji This week, Meta announced a partnership with the defense technology startup Anduril to build next-gen VR/AR extended reality headsets for the US military. Microsoft was given the contract in 2018, and the headsets were supposed to be built based on Microsoft HoloLens. Earlier this year, Microsoft gave up the entire project to Anduril but kept its role as the cloud services provider. Meta's Chief Technology Officer (CTO) is now calling for more Silicon Valley involvement in military contracts. Speaking at the Bloomberg Tech summit in San Francisco (via: Business Insider), Andrew Bosworth said the recent partnership between Meta, Anduril, and the US military could be a "return to grace" for Silicon Valley. "The Valley was founded on a three-way investment between the military, academics, and private industry. That was the founding of it," Bosworth said. Meta's CTO added that building VR/AR headsets for the US military doesn't turn the company into a defense contractor. He also said it was "way too early" to determine whether military contracts would become a business segment for Meta. "So far, it's like a zero. Let's start with one and go from there. I think there's no reason it couldn't be meaningful in the impact that it has," he added. The US military's desire for AI-powered tools and weapons has turned Big Tech into military contractors, whether willingly or unwillingly. Companies like Microsoft, Google, and Meta have a long history of providing services to the military and law enforcement agencies. The relationship between tech firms and the defense segment has always been controversial. In the most recent case, a group of Microsoft employees protested against the company's partnership with the Israeli military, which led to the layoff of the protesting staff.
    • Or run msinfo32! With Windows 11, Microsoft believes it has reinvented the wheel?
    • The long-awaited Nothing Phone (3) is finally coming next month, launch date confirmed by Aditya Tiwari London-based consumer electronics brand Nothing is due to launch its latest flagship in 2025. The company dropped a new teaser for the Phone (3), revealing when the flagship device will be out on the market. Nothing Phone (3) will be unveiled during a live event on July 1 at 1:00 PM ET / 10:00 AM PT / 6:00 PM BST / 11:30 PM IST. It has already created a live event titled "Come to Play" on its official YouTube channel, for which you can add a reminder by clicking on the "Notify Me" button. Nothing CEO Carl Pei has previously dropped several details about the unreleased smartphone. He took part in a social media AMA earlier this year and said Nothing Phone (3) will arrive in the third quarter of 2025. Pei confirmed that Nothing Phone (3) will make its way to the US this time after a dry spell since 2023. However, he didn't specify whether the device will be sold directly or through the beta channel, which currently includes Phone (3a), Phone (3a) Pro, and CMF Phone 2 Pro. The US has been a rocky terrain for Nothing. Its first smartphone was made available through the beta channel, and the Nothing Phone (2) is the only smartphone from the company that has been widely available in the US. The Glyph interface featured on the back of Nothing smartphones has remained a differentiating factor from the start. However, the smartphone maker recently posted a 9-second video in which the Glyph lights on the back of a Nothing smartphone abruptly turn off. "We killed the Glyph Interface," the company said. It makes sense when you check out the Phone (3) teaser and see dot matrix-style lights being flashed in a pattern. Nothing released another teaser about a week ago, featuring the number 3 lit up as dot matrix LEDs. If you're looking for some trivia, Nothing product manager Raymond Zhu estimated in a Q&A video that the company would need to sell about 250,000 Phone (3) units to turn a profit. Answering another question, he added that their biggest weakness is "no one knows us", and the company is struggling to reach the masses without high marketing budgets. Let's wait to see what Nothing has in store for Phone (3) next month other than the new physical button. Speaking of the future of smartphones, the Nothing CEO believes that our entire software experience will eventually be condensed down to just one app.
    • As far as I can remember, no one has done a 4v4 before. 2v2? yes. 3v3? yes.
  • Recent Achievements

    • Week One Done
      jbatch earned a badge
      Week One Done
    • First Post
      Yianis earned a badge
      First Post
    • Rookie
      GTRoberts went up a rank
      Rookie
    • First Post
      James courage Tabla earned a badge
      First Post
    • Reacting Well
      James courage Tabla earned a badge
      Reacting Well
  • Popular Contributors

    1. 1
      +primortal
      403
    2. 2
      +FloatingFatMan
      179
    3. 3
      snowy owl
      174
    4. 4
      ATLien_0
      170
    5. 5
      Xenon
      135
  • Tell a friend

    Love Neowin? Tell a friend!