• 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

    • Oh wow, a patch for an Unreal game to improve performance? We'll see...
    • Get this massive 4TB WD_BLACK SN7100 SSD at a new all-time low price by Taras Buria Xbox owners recently received a new storage upgrade option, which allows them to equip the Xbox Series X|S with 4TB of extra space. That card, however, has an eye-watering price tag—nearly as much as the 1TB Xbox Series S. On the PC side, though, things are much better. Right now, if you need a 4TB SSD without selling a kidney, you can get the WD_BLACK SN7100 PCIe Gen4 SSD. It is now available on Amazon at a new all-time low price after a 16% discount (nearly half the cost of the new 4TB Xbox Storage Expansion Card). The SN7100 is a fast, reliable, and, more importantly, affordable Gen4 solid-state drive. Its speeds are rated up to 7,000MB/s sequential read and 6,700MB/s sequential write, while random input-output speeds are rated at 900K IOPS read and 1,350K IOPS write. These specs are not record-breaking, but they are fast enough for modern gaming (DirectStorage is supported), fast loading times in games and apps, and quick file transfer. The WD_BLACK SN7100 has a limited five-year warranty and endurance rating up to 2,400 TBW. You can monitor the health of your drive in the WD_Black Dashboard app on Windows. As for compatibility, you can use the SN7100 in any PC that accommodates M.2 2280 PCIe Gen4 drives, including PlayStation 5. It is compatible with PCIe Gen3 systems, but the maximum speeds will be limited. 4TB WD_BLACK SN7100 PCIe Gen4 Solid-State Drive - $249.99 | 16% off on Amazon US This Amazon deal is US-specific and not available in other regions unless specified. If you don't like it or want to look at more options, check out the Amazon US deals page here. Get Prime (SNAP), Prime Video, Audible Plus or Kindle / Music Unlimited. Free for 30 days. As an Amazon Associate, we earn from qualifying purchases.
    • Snagit 2025.2.0 by Razvan Serea Snagit is the most complete screen capture utility available. Showing someone exactly what you see on your screen is sometimes the quickest and clearest way to communicate. With Snagit, you can select anything on your screen – an area, image, article, Web page, or error message – and capture it. Then, save the screen capture to a file, send it to Snagit​'s editor to add professional effects, share it by e-mail, or drop it into PowerPoint®, Word®, or another favorite application. Capture and share images, text or video from your PC. Create beautiful presentations, flawless documentation and quickly save online content. The latest version of Snagit offers a totally new interface and workflow - making SnagIt easier for beginners to use, while still providing maximum convenience and flexibility for the screen capture experts. Snagit 2025.2.0 changelog: Edit Images from Camtasia Snagit can now be used to seamlessly edit images from Camtasia. Requires Camtasia version 2025.2.0 or later. In the Camtasia Media Bin, right-click an image and select the Edit in Snagit option. In Snagit, make your edits. When finished, click Send in the "Send changes to Camtasia" notification to replace the image on your Camtasia timeline. Step Capture Improved the Step Capture template to accommodate longer auto-populated step text. Annotations such as Callout or Arrow tool objects now anchor to and move with sections as sections are added to, reordered, or deleted from templates. Subscription Software Updated the Account dropdown to open automatically when new subscription related messages are present. Performance Improvements Improved the startup time for Snagit Capture application. Updates for IT Administrators Updated BouncyCastle.Cryptography package to address CVE-2024-29857 and CVE-2024-30172. Removed dependency on Xceed Zip. Updated LeadTools DLLs. Fixed an issue where Snagit might not recognize offline subscription activation. Fixed an issue where the video recording toolbar could be hidden from users when using Snagit in virtual environments or with remote desktop applications. Bug Fixes Fixed an issue where using Step Capture with the Share destination set to File in the Capture Window could result in data loss. Fixed a crash that could occur when capturing on some HDR monitors. Fixed an issue where the cursor object in a capture might include some of the background image in certain situations. Fixed an issue with the Box share destination to use the default browser for authentication. Fixed an issue where the Blur tool Color property could show when the blur or pixelate Type was selected. Fixed an issue where the privacy policy link in Snagit's installer might not open in the expected language. (PONRPD) Download: Snagit 64-bit | 419.0 MB (Shareware) Links: SnagIt Home Page | Release Notes Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Markdown's creator weighs in on rumored Apple Notes export feature by David Uzondu The rumor mill is churning as we draw closer to WWDC2025, and one of the interesting developments being discussed is a report from 9To5Mac that claimed Apple Notes in iOS 19 iOS 26, will finally get Markdown export capabilities. This caught the attention of many, including the person who actually invented Markdown. John Gruber, the creator of Markdown, shared his thoughts on this potential new feature on his weblog. For those who don't know, Markdown, which Gruber developed back in 2004 with significant input from Aaron Swartz (RIP!), is a lightweight markup language designed for creating formatted text using a plain text editor. Its main advantage is that it is easy to read and easy to write. When the news first broke, some interpretations suggested Apple Notes would gain full Markdown support, transforming it into an application where users could directly type and see Markdown syntax, much like how specialized editors like Obsidian operate. These tools are intended for users to work directly within the Markdown framework for all their note-taking. Gruber himself indicated that he does not believe Apple Notes should become a full-fledged "Markdown editor," even as an option. He stated that such a change would be a "huge mistake." His reasoning is rooted in his original vision for Markdown and his view of Apple Notes' purpose. He reiterated that he initially designed Markdown as a "text-to-HTML conversion tool for web writers" and for contexts requiring plain text file storage. He feels Apple Notes serves a different, valuable role with its current WYSIWYG (What You See Is What You Get) rich text editing. This interface, he argues, is excellent for quickly capturing thoughts, particularly on an iPhone, and aligns with the Macintosh philosophy of user-friendliness. He pointed out that creating a syntactically incorrect markdown is trivial, whereas a malformed note should not be possible with Apple Notes. Despite his reservations about a complete Markdown overhaul for the editing experience, Gruber finds the prospect of exporting notes in Markdown format very appealing. He wrote that this specific capability "sounds awesome." He pointed out, quite rightly, that Apple Notes' current export functions are rather limited, primarily offering PDF and Pages document formats. Adding Markdown export would provide a much more flexible way for users, especially those in the "niche" he identifies with, to move their content out of Notes and into other applications. Gruber did express curiosity about how Apple might handle images embedded in notes during a Markdown export, as image handling can be a tricky aspect of Markdown.
    • What? Every single app I've installed from the Microsoft Store comes from its intended developer and works perfectly fine. What apps do you install?
  • Recent Achievements

    • Week One Done
      jfam earned a badge
      Week One Done
    • First Post
      survivor303 earned a badge
      First Post
    • Week One Done
      CHUNWEI earned a badge
      Week One Done
    • One Year In
      survivor303 earned a badge
      One Year In
    • Week One Done
      jbatch earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      419
    2. 2
      +FloatingFatMan
      183
    3. 3
      snowy owl
      181
    4. 4
      ATLien_0
      177
    5. 5
      Xenon
      140
  • Tell a friend

    Love Neowin? Tell a friend!