• 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

    • AMD 25.6.1 driver out with RX 9060 XT support and a lot more FSR 4 games by Pulasthi Ariyasinghe A brand-new hardware launch is happening today for AMD, and to make sure its new GPUs are running properly, a new graphics driver has also landed right alongside it. The AMD Software: Adrenalin Edition 25.6.1 driver lands with support for the RX 9060 XT and the AMD Radeon AI PRO R9700, while also finally updating the number of games that support its AMD FidelityFX Super Resolution 4 upscaling technology. The consumer space-targeted RX 9060 XT graphics card comes in 8GB and 16GB flavors starting at $300 and $350 price points, respectively. Check out our launch coverage for this RDNA 4 GPU for more details here. At the same time, the AMD Radeon AI PRO R9700 comes in for handling professional workloads with a whopping 32GB of VRAM. While support for this card has already arrived with the latest driver, AMD is expecting to ship the product sometime in July 2025. The driver has also added official support for Onimusha 2: Samurai's Destiny Remaster as well, the Capcom-developed action game from last month. As for fixes, AMD has said that it has resolved reversed Quality and Performance selections in the Radeon Boost UI, as well as Le Mans Ultimate performance issues on RX 9070 series GPUs. There are quite a few known issues AMD is still working on: Stutter and lower than expected performance may be observed when using alt-tab and streaming to Discord with multiple monitors. Intermittent application crash or driver timeout may be observed while playing Marvel Spiderman 2 with Ray Tracing enabled on Radeon™ RX 9060 XT. Intermittent application crash may be observed when first launching The Last of Us Part 1 on Radeon™ RX 9060 XT graphics products. Stutter may be observed while playing games with some VR headsets at 80Hz or 90Hz refresh rate on some AMD Radeon™ Graphics Products such as the Radeon™ RX 7000 series. Users experiencing this issue are recommended to change the refresh rate as a temporary workaround. Intermittent system or application crash may be observed while playing Cyberpunk 2077 on some AMD Radeon™ Graphics Products such as the Radeon™ RX 7000 series. Intermittent application crash or driver timeout may be observed while playing Monster Hunter Wilds with Radeon™ Anti-Lag and Instant Replay enabled. Artifacts or corruption may appear while playing Battlefield™ V on Radeon™ RX 7000 series graphics products. Stutter may be observed while playing Call of Duty®: Warzone™ Season 03 ‘Verdansk’ map on some AMD Graphics Products. Stutter and lower than expected performance may be observed while playing 4K resolution YouTube videos in Chromium. Users experiencing this issue are recommended to play videos in full screen as a temporary workaround. Texture flickering or corruption may appear while playing The Elder Scrolls IV: Oblivion Remastered with AMD FidelityFX™ Super Resolution enabled on Radeon™ RX 9070 XT. Users experiencing this issue are recommended to disable AMD FidelityFX™ Super Resolution as a temporary workaround. As for FSR 4, these games are now supported by the popular upscaling tech for gaining more frames: Deadzone: Rogue Rem Survival F1 25 Runescape: Dragonwilds Frostpunk 2 Star Wars Outlaws Legacy: Steel & Sorcery Steel Seed Lords of the Fallen Stellar Blade Planetaries Virtua Fighter 5 R.E.V.O QANGA Wild Assault The complete list of games with FSR 4 support, as well as upcoming implementations, can be found on AMD's support page here. The WHQL-certified AMD Software: Adrenalin Edition 25.6.1 driver can now be downloaded from the AMD Software app as well as the changelog page on its official website here.
    • Download Unruly: Fighting Back when Politics, AI, and Law Upend [...] (worth $18) for free by Steven Parker Claim your complimentary eBook worth $18 for free, before the offer ends on June 17. In Unruly: Fighting Back when Politics, AI, and Law Upend the Rules of Business, co-founder of software company Hence Technologies and former Global Deputy CEO of Eurasia Group, Sean West, delivers a startlingly insightful new take on how politics, technology and law are converging to upend the rules of business, generating dangerous risks and incredible opportunities. West convincingly argues that we must understand all three factors to get leverage over the future – a future filled with eroding rule of law, deepfakes that upend elections and court decisions, government pressure for businesses to be patriotic, robot lobbyists, a flood of automated legal claims pointed directly at your company and much more. Unruly offers detailed, practical advice for how to understand the world ahead, how to be resilient in the face of innumerable and complex challenges, and how to surround your business with the people and technology you need to excel in this environment. Inside the book: A framework for understanding all of the pressures on modern corporations from the convergence of geopolitics, technology and law. Strategies for turning your company's legal department into a source of enduring competitive advantage How to navigate government pressure for nationalism when you have a global footprint Approaches to winning in a world where courts are politicized and the law is increasingly automated, built on interviews with top experts Ways to deal with the backlash to ESG at a company level Perfect for executives, managers, entrepreneurs, founders, and other business leaders, Unruly is also a must-read for general counsels and the advisors who serve them. How to get it Please ensure you read the terms and conditions to claim this offer. Complete and verifiable information is required in order to receive this free offer. If you have previously made use of these free offers, you will not need to re-register. While supplies last! Download Unruly: Fighting Back when Politics, AI, and Law Upend [...] (worth $18) for free Offered by Wiley, view other free resources The below offers are also available for free in exchange for your (work) email: VideoProc Converter AI v7.5 for FREE (worth $78.90) – Expires 6/18 Winxvideo AI V3.0 Lifetime License for PC ($69.95 Value) FREE – Expires 6/8 Aiarty Image Enhancer for PC/Mac ($85 Value) FREE – Expires 6/8 Solutions Architect's Handbook, Third Edition ($42.99 Value) FREE – Expires 6/10 AI and Innovation ($21 Value) FREE – Expires 6/11 Unruly: Fighting Back when Politics, AI, and Law Upend [...] ($18 Value) FREE - Expires 6/17 SQL Essentials For Dummies ($10 Value) FREE – Expires 6/17 Continuous Testing, Quality, Security, and Feedback ($27.99 Value) FREE – Expires 6/18 Macxvideo AI ($39.95 Value) Free for a Limited Time – Expires 6/22 The Ultimate Linux Newbie Guide – Featured Free content Python Notes for Professionals – Featured Free content Learn Linux in 5 Days – Featured Free content Quick Reference Guide for Cybersecurity – Featured Free content We post these because we earn commission on each lead so as not to rely solely on advertising, which many of our readers block. It all helps toward paying staff reporters, servers and hosting costs. Other ways to support Neowin The above deal not doing it for you, but still want to help? Check out the links below. Check out our partner software in the Neowin Store Buy a T-shirt at Neowin's Threadsquad Subscribe to Neowin - for $14 a year, or $28 a year for an ad-free experience Disclosure: An account at Neowin Deals is required to participate in any deals powered by our affiliate, StackCommerce. For a full description of StackCommerce's privacy guidelines, go here. Neowin benefits from shared revenue of each sale made through the branded deals site.
    • AMD RX 9060 XT launches above MSRP and is available to buy now by Sayan Sen At Computex 2025 this year, AMD announced its RX 9060 XT mid-range desktop GPUs. The new graphics card landed in both 8GB and 16GB flavors and targets 1080p as well as light 1440p gaming. The community and some of the media criticized the 8GB VRAM model, but AMD defended the move explaining how the smaller memory buffer is not a cause of worry for the majority. Both the 8 GB and the 16 GB RX 9060 XT are now available for purchase. A new driver is out too with Adrenalin version 25.6.1. However, as always, day one stocks would likely be highly limited, similar to other GPUs or any other product, like the Nintendo Switch 2, that also landed today. Third-party AIB (add in board) vendors like Gigabyte, for example, are selling the 8GB at $329 (SEP is $299) currently on Amazon US, so expect some markup. The technical specifications of the Radeon RX 9060 XT are given below: Specification Value GPU Architecture AMD RDNA™ 4 Core Compute Units 32 Video Memory 16 GB / 8GB GDDR6 Infinity Cache 32 MB Core Boost Clock Up to 3.13 GHz Memory speed/bandwidth 20 Gbps / 320 GB/s AI Performance 821 TOPS (INT4 with sparsity) Raytracing & AI Accelerators 32 3rd Generation Raytracing Accelerators; 64 2nd Generation AI Accelerators PCIe Interface PCIe® 5.0 x16 Display Outputs DisplayPort™ 2.1a, HDMI® 2.1b Total Board Power (TBP) 160W* If you notice, we have an asterisk for the TBP value in the table above. That is because AMD says that it can vary between 150 and 182 watts. Performance-wise, we know the $349 16 GB variant is close to the Nvidia RTX 5060 Ti in rasterization but falls behind in ray tracing. Meanwhile, the 8GB model, priced the same as the GeForce RTX 5060 at $299, should be better, as both 8 Gig and 16 Gig SKUs are identical spec-wise outside of memory capacity. As an Amazon Associate we earn from qualifying purchases.
    • It actually looks decent, although trailers could make the worst nonsense look watchable sometimes. I'm not a fan of the "extended" Aliens universe (Prometheus, Covenant), but I liked Romulus so will definitely give this a shot.
  • 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
      406
    2. 2
      +FloatingFatMan
      181
    3. 3
      snowy owl
      176
    4. 4
      ATLien_0
      170
    5. 5
      Xenon
      135
  • Tell a friend

    Love Neowin? Tell a friend!